summaryrefslogtreecommitdiff
path: root/runtime/doc
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/doc
parentb4210b3bc14e2918f153a7307530fbe6eba659e1 (diff)
downloadvim-git-071d4279d6ab81b7187b48f3a0fc61e587b6db6c.tar.gz
updated for version 7.0001v7.0001
Diffstat (limited to 'runtime/doc')
-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
134 files changed, 106121 insertions, 0 deletions
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
+
+