summaryrefslogtreecommitdiff
path: root/usr.bin/vim/doc/vim_ref.txt
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/vim/doc/vim_ref.txt')
-rw-r--r--usr.bin/vim/doc/vim_ref.txt9855
1 files changed, 9855 insertions, 0 deletions
diff --git a/usr.bin/vim/doc/vim_ref.txt b/usr.bin/vim/doc/vim_ref.txt
new file mode 100644
index 00000000000..e9358ebe02d
--- /dev/null
+++ b/usr.bin/vim/doc/vim_ref.txt
@@ -0,0 +1,9855 @@
+*vim_ref.txt* For Vim version 4.2. Last modification: 1996 June 17
+
+
+ VIM REFERENCE MANUAL
+
+ By Bram Moolenaar
+
+
+
+There is a contents listing at the end of this document.
+
+This manual mostly assumes that there is only one window. The commands and
+options for multiple windows and buffers are explained in |vim_win.txt|.
+
+This manual describes running Vim from a normal terminal or with a terminal
+emulator in a window. See |vim_gui.txt| for the GUI version.
+
+You can use tags to jump to the explanation of a subject. Position the cursor
+on an item name between bars (e.g., |intro|) or an option name in single
+quotes (e.g., 'textwidth' ) and hit CTRL-]. This mostly also works on a
+command in double quotes (e.g., ":buf"). Three special characters in the
+names of the tags are not allowed. They have been replaced with letters:
+"bar" for '|', "star" for '*', and "quote" for '"'.
+
+ tag starts with example
+ Normal and Visual mode nothing |x|
+ Visual mode "v_" |v_u|
+ Insert mode "i_" |i_<Esc>|
+ Command line commands ":" |:quit|
+ Command line editing "c_" |c_<Del>|
+ Vim command options "-" |-r|
+ Vim options "'" |'shell'|
+
+
+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 8-bit ASCII 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 |vim_gui.txt|).
+
+Throughout this manual the differences between Vi and Vim are mentioned in
+curly braces. See |vim_diff.txt| for a summary of the differences.
+
+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:
+ system see
+ Amiga |vim_ami.txt|
+ Archimedes |vim_arch.txt|
+ Atari MiNT |vim_mint.txt|
+ Macintosh |vim_mac.txt|
+ MS-DOS |vim_dos.txt|
+ OS/2 |vim_os2.txt|
+ Unix |vim_unix.txt|
+ Win32: Windows NT / Windows 95 |vim_w32.txt|
+
+This manual is a reference for all the Vim commands and options. This is not
+an introduction to the use of Vim. There are many books on vi that contain a
+section for beginners.
+
+A summary of this manual can be found in the file "vim_help.txt",
+|vim_help.txt|. It can be accessed from within Vim with the <Help> or <F1>
+key and with the command ":help", |:help|. The 'helpfile' option can be set
+to the name of the help file, so you can put it in any place you like.
+
+
+2. Notation *notation*
+===========
+
+[] Characters in square brackets are optional.
+
+ *count*
+[count] An optional number that may precede the command to multiply
+ or iterate the command. If no number is given, a count of one
+ is used, unless otherwise noted. Note that in this manual the
+ [count] is not mentioned in the description of the command,
+ but only in the explanation. This was done to make the
+ commands easier to lookup. If the "sc" option is on
+ (|'showcmd'|), the (partially) entered count is shown at the
+ bottom of the window. You can use <Del> to erase the last
+ digit (|N<Del>|).
+
+["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 '.'. The uppercase
+ and lowercase letters 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).
+
+ *{motion}*
+{motion} A command that moves the cursor. See the list in chapter 6,
+ |cursor_motions|. This is used after an operator command
+ |operator| to move over the text that is to be operated upon.
+ If the motion includes a count and the operator also had a
+ count, the two counts are multiplied. For example: "2d3w"
+ deletes six words. The motion can also be a mouse click. The
+ mouse is currently only supported for MS-DOS, Win32 and xterm
+ under Unix.
+
+ *{Visual}*
+{Visual} A piece of text that is started with the "v", "V", or CTRL-V
+ command and ended by the cursor position. This is used
+ before an operator command |operator| to highlight the text
+ that is to be operated upon. See the chapter on Visual mode
+ |Visual_mode|.
+
+<character> A special character from the table below or a single ASCII
+ character.
+
+'character' A single ASCII character.
+
+<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.
+
+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.
+
+'option' An option, or parameter, that can be set to a value, is
+ enclosed in single quotes. See chapter 19, |options|.
+
+"command" In examples, the commands you can type are enclosed in double
+ quotes.
+
+ *key_notation*
+notation meaning equivalent decimal value(s)
+-----------------------------------------------------------------------
+<Nul> zero CTRL-@ 0 (stored as 10)
+<BS> backspace CTRL-H 8 *backspace*
+<Tab> tab CTRL-I 9 *tab*
+ *linefeed*
+<NL> linefeed CTRL-J 10 (used for <Nul>)
+ *carriage return*
+<CR> carriage return CTRL-M 13
+<Esc> escape CTRL-[ 27 *escape*
+<Space> space 32 *space*
+<Del> delete 127
+
+<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
+<F1> - <F12> function keys 1 to 12 *function_key* *function-key*
+<S-F1> - <S-F12> shift-function keys 1 to 12
+<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*
+<S-...> shift-key *shift*
+<C-...> control-key *control* *ctrl*
+<M-...> alt-key or meta-key *meta* *alt*
+<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 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|.
+
+ *<>*
+Some of the examples are given in the <> notation. The rules are:
+ 1. Any printable characters are typed directly, except backslash and '<'
+ 2. A backslash is represented with "\\", double backslash.
+ 3. A real '<' is represented with "\<".
+ 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 this notation in Vim, you have to remove the 'B' flag from
+'cpoptions' and make sure the '<' flag is excluded (it already is by default).
+ :set cpo=ceFs
+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"!
+
+
+3. Starting Vim *starting*
+===============
+
+3.1 Vim arguments *vim_arguments*
+
+Most often, Vim is started to edit a single file with the command
+
+ vim file *-vim*
+
+More generally, Vim is started with:
+
+ vim [options] [arglist]
+
+If the arglist is missing, the editor will start with an empty buffer.
+Otherwise exactly one out of the following three may be used to choose one
+or more files to be edited.
+
+ *-file* *--*
+file .. A list of 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
+
+ *-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 that case,
+ "tag" should 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 the
+ section on tags, |tags|).
+
+ *-e* *-qf*
+-e [errorfile] QuickFix mode. The file with the name [errorfile] is read
+ and the first error is displayed. If [errorfile] is not
+ given, the 'errorfile' option is used for the file name
+ (default "AztecC.Err" for the Amiga, "errors.vim" for other
+ systems). See section 5.5: "using the QuickFix mode",
+ |quickfix|. {not in Vi}
+
+ *startup-options*
+The options, if present, must precede the arglist. The options may be given
+in any order. Single-letter options can be combined after one dash.
+
+ *-+*
++[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 the section
+ "pattern searches" for the available search patterns,
+ |search_pattern|).
+
++{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
+
+ Note: You can use only one "+" or "-c" argument in a Vim
+ command.
+
+ *-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 the
+ chapter "Recovery after a crash", |crash_recovery|.
+
+ *-L*
+-L Same as -r. {only in some versions of Vi: "List recoverable
+ edit sessions"}
+
+ *-v*
+-v View 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 -v option.
+ If your system does not support links and you do not want to
+ have the executable twice, you could make an alias: "alias
+ view vim -v". The 'updatecount' option will be set to 10000,
+ meaning that the swap file will not be updated automatically
+ very often. {Vi: "ex -v" means to start ex in vi mode.
+ "vi -v" does nothing}
+
+ *-R*
+-R Readonly mode. Same as -v.
+
+ *-b*
+-b Binary mode. The 'textauto', 'textmode', and 'expandtab'
+ options 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 5.6:
+ "Editing binary files", |edit_binary|. {not in Vi}
+
+ *-l*
+-l Lisp mode. Sets the 'lisp' and 'showmatch' options on.
+
+ *-H*
+-H Hebrew mode. Sets the 'hkmap' and 'rightleft' options on.
+ (Only when compiled with LEFTRIGHT defined, otherwise Vim
+ gives an error message and exits). {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".
+ {not in Vi}
+
+ *-o*
+-o[N] Open N windows. 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}
+
+ *-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 chapter 20, |terminal_info|).
+ {not in Vi}
+
+ *-d*
+-d {device} Amiga only: 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}
+
+ *-x*
+-x Amiga only: 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 section 3.3, |amiga_window|. {not in Vi}
+
+ *-f*
+-f GUI only: 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'. Careful: You can
+ use "-gf" to start the GUI in the foreground, but "-fg" is
+ used to specify the foreground color. {not in Vi} |gui_fork|
+
+ *-u*
+-u {vimrc} The file "vimrc" is read for initializations. 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. {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}
+
+ *-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. See also the section
+ "complex repeats", |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 the section "complex
+ repeats", |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.
+
+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 -v".
+
+
+3.2 Workbench (Amiga only) *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 filename as
+current filename, 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 filenames, from the
+workbench.
+
+
+3.3 Vim window (Amiga only) *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 -e option (Quickfix mode) or with
+ the -x option, this method is not used. The reason for this is that
+ when a compiler starts Vim with the -e option it will wait for a
+ return code. With the script trick, the compiler cannot get the
+ return code. The -x 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
+ -e or -x 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.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. Setting the 'shell' option *SHELL* *COMSPEC*
+ The environment variable SHELL, if it exists, is used to set the
+ 'shell' option. On MS-DOS and Win32, the COMPSPEC variable is used
+ if SHELL is not set.
+
+2. Setting the 'term' option *TERM*
+ The environment variable TERM, if it exists, is used to set the 'term'
+ option.
+
+3. Reading 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.
+
+ If Vim was started with "-u filename", the file "filename" is used.
+ All following initializations until 4. are skipped.
+ "vim -u NONE" can be used to skip these initializations. |-u|
+
+ a. For Unix the system vimrc file is read for initializations. The path
+ of this file is shown with the ":version" command.
+
+ *VIMINIT* *.vimrc* *_vimrc* *EXINIT* *.exrc* *_exrc*
+ b. Four places are searched for initializations. The first that exists
+ is used, the others are ignored.
+ - The environment variable VIMINIT
+ - The user vimrc file:
+ "~/.vimrc" (for Unix and OS/2)
+ "s:.vimrc" (for Amiga)
+ "$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.
+ If $VIM is not set, $HOME is used.
+ - The environment variable EXINIT
+ - The user exrc file:
+ "~/.exrc" (for Unix and OS/2)
+ "s:.exrc" (for Amiga)
+ "$VIM\_exrc" (for MS-DOS and Win32).
+
+ c. If the 'exrc' option is on (which is not the default), the current
+ directory is searched for three 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)
+
+4. Setting '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.
+
+5. Read the viminfo file
+ If the 'viminfo' option is not empty, the viminfo file is read. The
+ default is empty, so 'viminfo' must have been set by one of the
+ previous initializations. See |viminfo_file|.
+
+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)
+
+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.
+
+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.
+Otherwise it would be possible that you accidentally use a vimrc 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!
+
+ *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.
+- 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".
+ |viminfo_file|.
+
+
+3.5 Suspending *suspend*
+
+ *CTRL-Z* *v_CTRL-Z*
+CTRL-Z On Unix systems: Suspend Vim. On other systems:
+ start a new shell (like ":sh"). Same as ":stop".
+ Works in Normal and in Visual mode. In Insert and
+ Command-line mode, the CTRL-Z is inserted as a normal
+ character.
+
+
+:sus[pend][!] or *:sus* *:suspend* *:st* *:stop*
+:st[op][!] Suspend the editor. If the '!' is not given, the
+ buffer was changed, 'autowrite' is set, and a filename
+ is known, the buffer will be written.
+
+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.
+
+
+3.6 The viminfo file *viminfo_file*
+
+The viminfo file is used to store:
+- The command line history.
+- The search string history.
+- Contents of registers.
+- Marks for several files.
+- File marks, pointing to locations in files.
+- Last search/substitute pattern (for 'n' and '&').
+
+The viminfo file is only supported when Vim has been compiled with VIMINFO
+defined. If the output of ":version" contains "+viminfo" then it was; if it
+contains "-viminfo" then it wasn't. By default, VIMINFO is defined.
+
+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.
+
+When Vim is exited 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').
+
+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.
+
+The default name of the viminfo file is "$HOME/.viminfo" for Unix,
+"s:.viminfo" for Amiga, "$VIM\viminfo" for MS-DOS and Win32. The "-i" Vim
+argument can be used to set another file name, |-i|. For the commands below,
+another file name can be given, overriding the default and the name given with
+"-i". When the file name given with the "-i" Vim argument is "NONE"
+(all uppercase), no viminfo file is ever read or written.
+
+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|).
+
+ *:rv* *:rviminfo*
+: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*
+: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. {not in Vi}
+
+
+4. Modes *vim_modes*
+========
+
+4.1 Introduction
+
+Vim has four BASIC modes:
+
+Normal mode In Normal mode you can enter all the 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|.
+
+Insert mode In Insert mode the text you type is inserted into the
+ buffer. If the 'showmode' option is on (which is
+ default), the string "-- INSERT --" is shown at the
+ bottom of the window. |mode_ins_repl|
+
+Command-line mode In Command-line mode you 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, "!". |mode_cmdline|
+
+There are two ADDITIONAL modes:
+
+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. If the 'showmode' option is on,
+ (which is the default), the string "-- REPLACE --" is
+ shown at the bottom of the window. |replace_mode|
+
+Insert command mode Entered when CTRL-O given in Insert mode. This is
+ like Normal mode, but after executing one command Vim
+ returns to Insert mode. The string "-- (insert) --"
+ is shown at the bottom of the window.
+
+4.2 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. You will know you are back in
+Normal mode when you see the screen flash or hear the bell after you type
+<Esc>.
+
+- go from Normal mode to Visual mode by giving one of the commands "vV^V"
+- go from Normal mode to Insert mode by giving one of the commands
+ "iIaAoOcCsS".
+- go from Normal mode to Replace mode with the "R" command (not the "r"
+ command!).
+- go from Normal mode to Command-line mode with the one of the commands
+ ":/?!".
+
+ *i_esc*
+- go from Insert or Replace mode to Normal mode with <Esc> (twice in some
+ rare cases).
+- go from Visual mode to Normal mode by giving a non-movement command, which
+ causes the command to be executed, or by hitting <Esc> or 'v', which does
+ nothing.
+- 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"}
+
+- go from Insert mode to Replace mode by hitting <Insert>.
+- go from Replace mode to Insert mode by hitting <Insert>.
+- go from Visual mode to Command-line mode by hitting ':'. The line numbers
+ of the highlighted area will be inserted in the command line.
+
+If the 'insertmode' option is on, editing a file will start in Insert mode.
+
+
+4.3 Insert and Replace mode *mode_ins_repl*
+
+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.
+
+4.3.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.
+
+char action
+-----------------------------------------------------------------------
+ *i_CTRL-[* *i_<Esc>*
+<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish
+ abbreviation.
+ *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>*
+<BS> or CTRL-H Delete the character before the cursor (see below).
+ See |:fixdel| if your <BS> does not do what you want.
+ {Vi: does not delete autoindents}
+ *i_<Del>*
+<Del> Delete the character under the cursor. If the cursor is at
+ the end of the line, and the 'backspace' option is non-zero,
+ delete the newline; 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 below). 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
+ below).
+
+ *i_CTRL-I* *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). See also the 'smarttab' option and
+ section 4.3.4, |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 4.7, |digraphs|). When {char1} is a special
+ key, the code for that key is inserted. Neither char is
+ considered for mapping. {not in Vi}
+
+CTRL-N Find next keyword (see 4.3.6, |i_CTRL-N|). {not in Vi}
+CTRL-P Find previous keyword (see 4.3.6, |i_CTRL-P|). {not in Vi}
+
+CTRL-R <0-9a-z"%:.-> *i_CTRL-R*
+ Insert the contents of 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 last command line
+ '.' the last inserted text
+ '-' the last small (less than a line) delete
+ See |registers| about registers. {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. Up to three digits form the
+ decimal value of a single byte (see below |i_CTRL-V_digit|.
+ The non-digit and the three digits are not considered for
+ mapping. {Vi: no decimal byte entry}
+
+ *i_CTRL-Q*
+CTRL-Q Same as CTRL-V.
+
+CTRL-X Enter CTRL-X mode. This is a sub-mode where commands can
+ be given to complete words or scroll the window. See below,
+ |i_CTRL-X|, and in 4.3.6, |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}
+
+ *i_CTRL-B*
+CTRL-B Toggle the 'revins' option (B for Backwards). Only if
+ compiled with RIGHTLEFT (which is not the default). See
+ |ins_reverse|. {not in Vi}
+ *i_CTRL-_*
+CTRL-_ This key is only available if Vim was compiled with RIGHTLEFT.
+ Its purpose is to switch between languages while in insert
+ mode, 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, unlike
+ CTRL-B which leaves the cursor in the same place.
+
+ Please refer to |vim_rlh.txt| for more information about
+ right-to-left mode. {not in Vi}
+
+ *i_<Insert>*
+<Insert> Toggle between insert and replace mode. {not in Vi}
+-----------------------------------------------------------------------
+
+The effect of the <BS>, CTRL-W, and CTRL-U depend on the 'backspace' option
+(unless 'revins' is set):
+
+backspace action
+ option
+ 0 delete stops in column 1 and start position of insert
+ 1 delete stops at start position of insert
+ 2 delete always; CTRL-W and CTRL-U stop once at start position of
+ insert
+
+If the 'backspace' option is non-zero 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 newline 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 followed by one, two, or three digits, you can enter the decimal
+value of any byte, except 10. Normally CTRL-V is followed by three digits.
+The formed byte is inserted as soon as you type the third digit. If you type
+only one or two digits and then a non-digit, the decimal value of those one
+or two digits form the byte. After that the non-digit 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. The maximum value that can be entered is 255.
+
+ *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 4.3.6, |ins_completion|. These are only
+available when Vim was compiled with INSERT_EXPAND defined. If ":version"
+shows "+insert_expand" then it was; if it shows "-insert_expand" then these
+commands are not available. 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.
+
+
+4.3.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 2 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>*
+<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>*
+<S-Right> cursor one word forward (like "w" command) *i_<S-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>*
+CTRL-O execute one command and return to Insert mode*i_CTRL-O*
+-----------------------------------------------------------------------
+
+The CTRL-O command sometimes has one side effect: If the cursor was beyond the
+end of the line, it will be put on the last character in the line.
+The shifted cursor keys are not available on all terminals.
+
+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.
+
+
+4.3.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.
+
+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 "gqp", 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 hit "gq". See also |gq|.
+
+
+4.3.4 'expandtab' and 'smarttab' 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.
+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}
+
+
+4.3.5 Replace mode *replace_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}
+
+
+4.3.6 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).
+Completion can be done for:
+
+1. Whole lines |i_CTRL-X_CTRL-L|
+2. keywords in the current file |i_CTRL-N|
+3. keywords in 'dictionary' |i_CTRL-X_CTRL-K|
+4. keywords in the current and included files |i_CTRL-X_CTRL-I|
+5. tags |i_CTRL-X_CTRL-]|
+6. file names |i_CTRL-X_CTRL-F|
+7. definitions or macros |i_CTRL-X_CTRL-D|
+
+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.
+
+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
+
+
+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.
+ 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.
+
+Completing keywords in current file *compl_current*
+
+ *i_CTRL-P*
+ *i_CTRL-N*
+The keys CTRL-N and CTRL-P can be used to complete the keyword that is in
+front of the cursor. This is useful if you are writing a program that has
+complicated variable names, and you want to copy a name from the text before
+of after the cursor.
+
+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).
+
+With CTRL-N (next), the search goes forward; with CTRL-P (previous), the
+search goes backward. The first time the search starts where the cursor is.
+Subsequently, the search starts at the last found position. If you type any
+other character than CTRL-P or CTRL-N, the current text is accepted and the
+search pattern is forgotten.
+
+If the search found a match, it is inserted at the cursor position. Any
+previous match is replaced. If no match was found, Vim will beep.
+
+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).
+
+If there is only one completion found, then a second CTRL-P or CTRL-N will
+give the message 'No other matches'.
+
+If the only match in the file is an exact match, where no extra characters
+would be typed, then the message 'Exact match only' is given (this is also
+useful for checking that you typed the word correctly).
+
+The mode (-- INSERT --) is shown, unless there is another more important
+message (e.g., "Pattern not found"). This other message will stay until
+another key is hit, and then the mode is shown again.
+
+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.
+
+
+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.
+
+ 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.
+
+
+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 succesful 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.
+
+
+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).
+ 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.
+
+
+4.4 Command-line mode *mode_cmdline* *:*
+
+Command-line mode is used to enter Ex commands (":"), search patterns
+("/" and "?"), and filter commands ("!").
+
+
+4.4.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 ^A <Home>
+ :cnoremap ^F <Right>
+ :cnoremap ^B <Left>
+ :cnoremap ^[b <S-Left>
+ :cnoremap ^[f <S-Right>
+(All ^x characters entered with CTRL-V CTRL-x, <xx> typed literally).
+
+ *cmdline_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 two history
+tables: one for ':' commands, one for search strings. These are completely
+separate. The search strings history can be accessed only when entering a
+search string, the ':' history only when entering a command line for the ":"
+command. Use the 'history' option to set the number of lines that are
+remembered (default: 20). Note that when you enter a command line that is
+excactly 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 come from mappings are not put in the history
+(detail: the decision is made from the last key that was typed for the line,
+normally <CR>). All searches are put in the search history, including the ones
+that come from commands like "*" and "#". {Vi: no history}
+
+There is an automatic completion of names on the command line; see 4.4.2,
+|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|).
+ *c_CTRL-Q*
+CTRL-Q Same as CTRL-V.
+
+ *c_<Left>*
+<Left> cursor left
+ *c_<Right>*
+<Right> cursor right
+ *c_<S-Left>*
+<S-Left> cursor one word left
+ *c_<S-Right>*
+<S-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
+
+ 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 4.7, |digraphs|). When {char1} is a special
+ key, the code for that key is inserted. {not in Vi}
+
+CTRL-R <0-9a-z"%:-> *c_CTRL-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. Special registers:
+ '"' the unnamed register, containing the text of
+ the last delete or yank
+ '%' the current file name
+ ':' the last command line
+ '-' the last small (less than a line) delete
+ Note: The '.' register (last inserted text) is not available
+ here. See |registers| about registers. {not in Vi}
+
+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).
+ *c_<Down>*
+<Down> recall more recent command line from history, whose beginning
+ matches the current command line (see below).
+
+ *c_<S-Up>* *c_<PageUp>*
+<S-Up> or <PageUp>
+ recall older command line from history
+ *c_<S-Down>* *c_<PageDown>*
+<S-Down> or <PageDown>
+ recall more recent command line from history
+
+CTRL-D command line completion (see 4.4.2, |cmdline_completion|)
+'wildchar' option
+ command line completion (see 4.4.2, |cmdline_completion|)
+CTRL-N command line completion (see 4.4.2, |cmdline_completion|)
+CTRL-P command line completion (see 4.4.2, |cmdline_completion|)
+CTRL-A command line completion (see 4.4.2, |cmdline_completion|)
+CTRL-L command line completion (see 4.4.2, |cmdline_completion|)
+
+ *c_CTRL-_*
+CTRL-_ 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 RIGHTLEFT. See |vim_rlh.txt|.
+
+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)
+
+
+4.4.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. Works always.
+- 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.
+
+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)
+ *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).
+ *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.
+
+The 'wildchar' option defaults to <Tab> (CTRL-E when compiled with
+COMPATIBLE; 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-L)
+This will find the longest match and then list all matching files.
+
+ *suffixes*
+For filename 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", which means that files ending in
+".bak", "~", ".o", ".h", ".info" and ".swp" 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.
+
+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 filename 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> (<C-P> is CTRL-P)
+
+
+4.4.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*
+'|' can be used to separate commands, so you can give multiple commands in one
+line. The commands ":global", "vglobal", ":!", ":r !", ":w !", ":help" and
+":autocmd" see the '|' as their argument, and can therefore not be followed by
+another command. If you want '|' to be included in one of the other commands,
+precede it with '\'. Note that this is confusing (inherited from Vi). With
+":g" the '|' is included in the command, with ":s" it is not. There is one
+execption: When the 'b' flag is present in 'cpoptions', with the ":map" and
+":abbr" commands and friends CTRL-V needs to be used instead of '\'. 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.
+
+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 filename is expected, they are
+expanded to the current and alternate filename (see the chapter "editing
+files" |:_%| |:_#|).
+
+Embedded spaces in filenames are allowed on the Amiga if one filename 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 filename, 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.4.4 Ex command line ranges *cmdline_ranges*
+
+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
+';'. When separated with ';' the cursor position will be set to that line
+before interpreting the next line specifier. 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*
+ {number} an absolute line number
+ . the current line *:.*
+ $ the last line in the file *:$*
+ % equal to 1,$ (the entire file) *:%*
+ * equal to '<,'> (the Visual area) *:star*
+ 't position of mark t (lower case) *:'*
+ /{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 "?" may be preceded with another address. The search starts from
+there. The "/" and "?" after {pattern} are required to separate the pattern
+from anything that follows.
+
+The {number} must be between 0 and the number of lines in the file. A 0 is
+interpreted as a 1, except with the commands tag, pop and read.
+
+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"
+
+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
+
+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".
+
+ *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>
+
+ *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.
+
+
+4.4.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. To avoid the special meaning of '%' and
+'#' insert a backslash before it.
+ % is replaced with the current filename *:_%*
+ # is replaced with the alternate filename *:_#*
+ #n (where n is a number) is replaced with the filename of
+ buffer n. "#0" is the same as "#"
+
+Note: the next four are typed literally, these are not special keys!
+ *:<cword>* *:<cWORD>* *:<cfile>* *:<afile>*
+ <cword> is replaced with the word under the cursor
+ <cWORD> is replaced with the WORD under the cursor (see |WORD|)
+ <cfile> is replaced with the path name under the cursor
+ <afile> when executing autocommands, is replaced with the file name
+ for a file read or write
+
+ *:_%:* *::p* *::h* *::t* *::r* *::e*
+After "%", "#", "#n", "<cfile>" or "<afile>" modifiers can be given (in this
+order):
+ :p Make file name a full path. Must be the first modifier.
+ :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 there is no head 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.
+
+Examples, when the file name is "src/version.c":
+ :p /home/mool/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
+
+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
+
+ *:_%<*
+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. Backticks also work, like in ":n `echo *.c`".
+But expansion is only done if there are any wildcards before expanding the
+'%', '#', etc.. This avoids expanding wildcards inside a file name.
+Examples: (alternate filename is "?readme?")
+ command expands to
+ :e # :e ?readme?
+ :e `ls #` :e {files matching "?readme?"}
+ :e #.* :e {files matching "?readme?.*"}
+
+
+4.5 The window contents *window_contents*
+
+In command 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.
+
+The bottom lines in the window may start with one of these two characters:
+
+'@' The next line is too long to fit in the window.
+'~' Below the last line in the buffer.
+
+If the bottom line is completely filled with '@', the line that is at the
+top of the window is too long to fit in the window. If the cursor is on this
+line you can't see what you are doing, because this part of the line is not
+shown. However, the part of the line before the '@'s can be edited normally.
+{Vi: gives an "internal error" on lines that do not fit in the window}
+
+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.
+
+Some commands hand over the window to external commands (e.g., ":shell" and
+"="). After these commands are finished the window may be clobbered with
+output from the external command, so it needs to be redrawn. This is also
+the case if something is displayed on the status line that is longer than
+the width of the window. If you are expected to have a look at the screen
+before it is redrawn, you get this message:
+
+ Press RETURN or enter command to continue
+
+After you type a key the screen will be redrawn and Vim continues. If you
+type <CR>, <SP> or <NL> nothing else happens. If you type any other key, it
+will be interpreted as (the start of) a new command. {Vi: only ":" commands
+are interpreted}
+
+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 filename 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 window resize works ok. {Vi: not ok}
+
+
+4.6 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.
+
+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 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" (Note that spaces in the <rhs> are allowed
+ and included in the replacement string.)
+ " 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.
+
+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.
+
+ *: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.
+
+:ab[breviate] <lhs> list the abbreviations that start with <lhs>
+
+: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
+
+ *: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}
+
+
+
+4.7 Digraphs *digraphs*
+
+ *:dig* *:digraphs*
+:dig[raphs] show currently defined digraphs. {not in Vi}
+
+:dig[raphs] {char1}{char2} {number} ...
+ Add digraph {char1}{char2} to the list. {number} is
+ the decimal representation of the character.
+
+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 above).
+
+Vim must have been compiled with DIGRAPHS defined. If this wasn't done, the
+":digraph" command will display an error message. You can also check this
+with the ":version" command. If it shows "+digraphs" then it's included,
+"-digraphs" means it's not included.
+
+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, a digraph {char2}{char1} is
+searched for. This will help when you don't remember which character comes
+first.
+
+Note that when you enter CTRL-K {char1}, where {char1} is a special key, the
+code for that special key is entered. This is not a digraph.
+
+Once you have entered the digraph the character is treated like a normal
+character, taking up only one character in the file and on the screen.
+Example:
+ '|' <BS> '|' will enter the double '|' character (166)
+ 'a' <BS> '^' will enter an 'a' with a hat (226)
+ CTRL-K '-' '-' will enter a minus sign (173)
+
+The default digraphs are listed in the file "vim_digr.txt" |digraph_table|.
+There are two sets: One that is used for MS-DOS and one for the international
+standard character set that is mostly used on Unix systems and the Amiga.
+With the wrong character set they will look illogical.
+
+For CTRL-K there is one general digraph: CTRL-K <Space> {char} will enter
+{char} with the highest bit set. This can be used to enter meta-characters.
+
+The <Esc> character cannot be part of a digraph. When hitting <Esc> the
+entering of the digraph is aborted and Insert mode or command-line mode is
+ended, just like hitting an <Esc>.
+
+If you accidently 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 >
+128. For example: You insert ue (u-umlaut) and the editor echoes \334 in
+Insert mode. After leaving the Insert mode everything is fine. Also fmt
+removes all characters with ascii > 128 from the text being formated.
+On some Unix systems this means you have to define the environment-variable
+LC_CTYPE. If you are using csh then put in your .cshrc following line:
+ setenv LC_CTYPE=iso_8859_1
+
+
+4.8 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|. Don't forget to
+do ":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 and for MS-DOS.
+Mouse clicks can be used to position the cursor, select the Visual area and
+paste. There are no menus, use the GUI version for that.
+
+The 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 return ..." question
+
+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).
+
+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 the the xterm. With the currently active mode not included in
+'mouse' all mouse clicks go to the xterm.
+
+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.
+
+ *xterm_copy_paste*
+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 loose the 8th bit when pasting (special characters are translated
+into other characters), you may have to do "stty cs8 -istrip" in your shell
+before starting Vim.
+
+Thus in an xterm the shift and ctrl keys cannot be used with the mouse. To
+make it possible to do the mouse commands that require the ctrl modifier, the
+"g" key can be typed before using the mouse:
+ "g<LeftMouse>" is "<C-LeftMouse> (jump to tag under mouse click)
+ "g<RightMouse>" is "<C-RightMouse> ("CTRL-T")
+
+A short overview of what the mouse buttons do:
+
+Normal Mode:
+event position Visual 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 Visual 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"
+
+(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 Visual area can be selected 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 Visual 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 and Visual mode clicking the right mouse button causes the Visual
+area to be extended. When clicking in a window which is editing another
+buffer, the Visual mode is stopped.
+
+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). 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. 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.
+
+In Insert mode, when a Visual area is selected, Vim goes into Normal mode
+temporarily. When Visual mode ends, it returns to Insert mode. This is like
+using CTRL-O in Insert mode.
+
+ *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).
+
+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 Visual area
+ <LeftRelease> left released set Visual area end
+ <MiddleMouse> middle pressed paste text at cursor position
+ <MiddleDrag> middle moved while pressed -
+ <MiddleRelease> middle released -
+ <RightMouse> right pressed extend Visual area
+ <RightDrag> right moved while pressed extend Visual area
+ <RightRelease> right released set Visual area end
+
+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 Visually highlighted text.
+
+Note the use of ":noremap" instead of "map" to avoid a recursive mapping.
+
+ *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>
+
+
+4.9 Online help *online_help*
+
+ *help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>*
+<Help> or
+:h[elp] Split the window and display the help file in
+ read-only mode. If there is a help window open
+ already, use that one. {not in Vi}
+
+:h[elp] {subject} Like ":help", additionally jump to the tag
+ {subject}. {subject} can be a regular expression.
+ :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 match is considered to be better when:
+ - if no match with same case is found, a match with
+ ignoring case will be used
+ - the match is after a non-alphanumereic character
+ - it is at near the beginning of the tag
+ - more alphanumeric characters match
+ - the length of the matched is smaller
+ 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". {not in Vi}
+
+The help file name can be set with the 'helpfile' 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 works with all characters.
+
+Use "CTRL-T" to jump back.
+Use ":q" to close the help window.
+
+ *help_xterm_window*
+If you want to have the help in another xterm window, you could use this
+command:
+ :!xterm -e vim +help &
+
+ *doc_files*
+All the help files must be in the same directory. The files are:
+ vim_help.txt overview and quick reference |vim_help.txt|
+ vim_idx.txt alphabetical index of all commands |vim_idx.txt|
+ vim_ref.txt reference manual (this file) |vim_ref.txt|
+ vim_win.txt reference manual for windows commands |vim_win.txt|
+ vim_diff.txt main differences between Vim and Vi |vim_diff.txt|
+ vim_digr.txt list of available digraphs |vim_digr.txt|
+ vim_tips.txt tips on using Vim |vim_tips.txt|
+ vim_gui.txt about the Graphical User Interface |vim_gui.txt|
+ vim_40.txt about version 4.0 |vim_40.txt|
+ vim_rlh.txt about the 'rightleft' option |vim_rlh.txt|
+
+ vim_unix.txt Unix specific remarks |vim_unix.txt|
+ vim_ami.txt Amiga specific remarks |vim_ami.txt|
+ vim_dos.txt MS-DOS specific remarks |vim_dos.txt|
+ vim_w32.txt Windows-NT/95 specific remarks |vim_w32.txt|
+ vim_os2.txt OS/2 specific remarks |vim_os2.txt|
+ vim_arch.txt Archimedes specific remarks |vim_arch.txt|
+ vim_mac.txt Macintosh specific remarks |vim_mac.txt|
+ vim_mint.txt Atari MiNT specific remarks |vim_mint.txt|
+
+ vim_tags tags file for documentation
+
+
+5. Editing files *edit_files*
+================
+
+5.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
+
+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 filename".
+
+If there already was a current filename, then that one becomes the alternate
+file name. All filenames are remembered in the file list. When you enter a
+filename, for editing (e.g., with ":e filename") or writing (e.g., with (:w
+filename"), the filename 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 filename}
+
+CTRL-G or *CTRL-G* *:f* *:file*
+:f[ile] Prints the current filename (as typed), the
+ cursor position (unless the 'ruler' option is set),
+ and the file status (readonly, modified). 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 filename with full
+ path. If the count is higher than 1 the current
+ buffer number is also given. {not in Vi}
+
+ *g_CTRL-G*
+g CTRL-G Prints the current position of the cursor in three
+ ways: Column, Line and Character. 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}
+
+ *:file_f*
+:f[ile] {name} Sets the current filename to {name}.
+
+:buffers
+:files
+:ls List all the currently known file names. See
+ 'vim_win.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 filename. 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 filename 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 accidently 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 filename 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.
+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.
+
+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, this will be refused. 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.
+
+
+5.2 Editing a file *edit_a_file*
+
+ *:e* *:edit*
+:e[dit] [+cmd] Edit the current file, unless changes have been made.
+
+ *:edit!*
+:e[dit]! [+cmd] Edit the current file always. Discard any changes to
+ the buffer.
+
+ *:edit_f*
+:e[dit] [+cmd] {file} Edit {file}, unless changes have been made.
+
+ *:edit!_f*
+:e[dit]! [+cmd] {file} Edit {file} always. Discard any changes to the
+ buffer.
+
+:e[dit] #[count] Edit the [count]th alternate filename (as shown by
+ :files). This command does the same as [count] CTRL-^.
+
+ *:ex*
+:ex [+cmd] [file] Same as :edit. {Vi: go from visual to Ex mode}
+
+ *:vi* *:visual*
+:vi[sual] [+cmd] [file] Same as :edit. {Vi: go from Ex to visual mode}
+
+ *:vie* *:view*
+:vie[w] [+cmd] file Same as :edit, but set 'readonly' option for this
+ buffer. {not in Vi}
+
+ *CTRL-^*
+[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' option is on and the buffer was
+ changed, write it.
+
+]f *]f*
+[f *[f* *gf*
+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. Uses the 'path' variable as a list of
+ directory names to look for the file. Also looks for
+ the file relative to the current file. This command
+ fails if the current file cannot be abandoned. If the
+ name is a hypertext link, that looks like
+ "type://machine/path", only "/path" is used. For Unix
+ the '~' character is expanded, like in "~user/file".
+ {not in Vi}
+
+ *:cd*
+:cd On non-Unix systems: Print the current directory
+ name. On Unix systems: Change the current directory
+ to the home directory.
+
+:cd {path} Change the current directory to {path}. Does not
+ change the meaning of an already entered file name,
+ because its full path name is remembered. On MS-DOS
+ this also changes the active drive.
+
+ *:chd* *:chdir*
+:chd[ir] [path] Same as :cd.
+
+ *:pw* *:pwd*
+:pw[d] Print the current directory name. {Vi: no pwd}
+
+These commands are used to start editing a single file. This means that the
+file is read into the buffer and the current filename is set. You may use the
+":cd" command to get to another directory, so you will not have to type that
+directory name in front of the filenames. One warning: 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 file name before the
+":cd".
+
+ *:filename*
+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.
+
+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.
+
+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 filename.
+
+Note that ":e file" will fail if there are changes in the current buffer,
+also when the 'autowrite' option is on. This is illogical, because with
+other commands (e.g., ":next") the current buffer would be written and
+abandoned, but this behaviour is compatible with Vi. If you encounter this
+problem, you can use CTRL-^ to jump to the file, because the alternate file
+name is set to the argument of the ":e" command.
+
+ *:+cmd*
+The [+cmd] can be used to position the cursor in the newly opened file:
+ + Start at the last line.
+ +{num} Start at line {num}.
+ +/{pat} Start at first line containing {pat}. {pat} must not
+ contain any spaces.
+ +{command} Execute {command} after opening the new file.
+ {command} is an Ex command. It must not contain
+ spaces.
+
+ *textmode_io*
+When reading a file when the 'textmode' option is off (default for
+non-MS-DOS) the <NL> character is interpreted as end-of-line. If 'textmode'
+is on (default for MS-DOS), <CR><NL> is also interpreted as end-of-line.
+Also see |textmode_read|.
+
+When writing a file when the 'textmode' option is off a <NL> character is
+used to separate lines. When the 'textmode' option is on <CR><NL> is used.
+Also see |textmode_write|.
+
+You can read a file with 'textmode' set and write it with 'textmode' reset.
+This will replace all <CR><NL> pairs by <NL>. If you read a file with
+'textmode' reset and write with 'textmode' set, all <NL> characters will be
+replaced with <CR><NL>.
+
+If you start editing a new file and the 'textauto' option is on (which is the
+default), Vim will try to detect whether the lines in the file are separated
+by 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> the 'textmode' option is set, otherwise it
+is reset. If the 'textmode' option is set on non-MS-DOS systems the message
+"[textmode]" is shown to remind you that something unusual is happening. On
+MS-DOS systems you get the message "[notextmode]" if the 'textmode' option is
+not set.
+
+If the 'textauto' option is off and 'textmode' is on, but while reading a file
+some lines did not end in <CR><NL>, "[CR missing]" will be included in the
+file message.
+
+Before editing binary, executable or Vim script files you should set the
+'textmode' and 'textauto' options off. With 'textmode' on you risk that
+single <NL> characters are unexpectedly replaced with <CR><NL>. A simple way
+to do this is by starting Vim with the "-b" option.
+
+
+5.3 The argument list *argument_list*
+
+If you give more than one filename when starting Vim, this list is
+remembered as the argument list. Do not confuse this with the file list,
+which you can see with the ":files" command |:files|. The argument list was
+already present in Vi, the file list is new in Vim. The file names in the
+argument list will also be present in the file list (unless they were
+deleted with ":bdel").
+
+You can use the argument list with the following commands:
+
+ *:ar* *:args*
+:ar[gs] Print the argument list, with the current file in
+ square brackets.
+
+ *:argu* *:argument*
+:[count]argu[ment] [count] [+cmd]
+ Edit file [count] in the argument list, unless
+ changes have been made and the 'autowrite' option is
+ off. {Vi: no such command}
+
+:[count]argu[ment]! [count] [+cmd]
+ Edit file [count] in the argument list, discard any
+ changes to the current buffer. {Vi: no such command}
+
+ *:n* *:next*
+:[count]n[ext] [+cmd] Edit [count] next file, unless changes have been
+ made and the 'autowrite' option is off {Vi: no
+ count}.
+
+:[count]n[ext]! [+cmd] Edit [count] next file, discard any changes to the
+ buffer {Vi: no count}.
+
+:ar[gs] [+cmd] {arglist}
+:n[ext] [+cmd] {arglist}
+ Define {arglist} as the new argument list and edit
+ the first one, unless changes have been made and the
+ 'autowrite' option is off.
+
+:ar[gs]! [+cmd] {arglist}
+:n[ext]! [+cmd] {arglist} *:next_f*
+ Define {arglist} as the new argument list and edit
+ the first one. Discard any changes to the buffer.
+
+:[count]N[ext] [count] [+cmd] *:Next* *:N*
+ Edit [count] previous file in argument list, unless
+ changes have been made and the 'autowrite' option is
+ off {Vi: no count}.
+
+:[count]N[ext]! [count] [+cmd]
+ Edit [count] previous file in argument list. Discard
+ any changes to the buffer {Vi: no count}.
+
+:[count]prev[ious] [count] [+cmd] *:prev* *:previous*
+ Same as :Next {Vi: only in some versions}
+
+ *:rew* *:rewind*
+:rew[ind] [+cmd] Start editing the first file in the argument list,
+ unless changes have been made and the 'autowrite'
+ option is off.
+
+:rew[ind]! [+cmd] Start editing the first file in the argument list.
+ Discard any changes to the buffer.
+
+ *:la* *:last*
+:la[st] [+cmd] Start editing the last file in the argument list,
+ unless changes have been made and the 'autowrite'
+ option is off. {not in Vi}
+
+:la[st]! [+cmd] Start editing the last file in the argument list.
+ Discard any changes to the buffer. {not in Vi}
+
+ *:wn* *:wnext*
+:[count]wn[ext] [+cmd] Write current file and start editing the [count]
+ next file. {not in Vi}
+
+:[count]wn[ext] [+cmd] {file}
+ Write current file to {file} and start editing the
+ [count] next file, unless {file} already exists and
+ the 'writeany' option is off. {not in Vi}
+
+:[count]wn[ext]! [+cmd] {file}
+ Write current file to {file} and start editing the
+ [count] next file. {not in Vi}
+
+:[count]wN[ext][!] [+cmd] [file] *:wN* *:wNext*
+:[count]wp[revous][!] [+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.
+
+For [+cmd] see 5.2 |edit_a_file|.
+
+The wildcards in the argument list are expanded and the filenames 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_quit*
+You are protected from leaving Vim if you have not been editing the last file
+in the argument list. This prevents you from forgetting that you were editing
+one out of several files. To exit anyway try to exit twice. If there are
+changes in the current buffer this will fail. You can exit anyway, and save
+any changes, with the ":wq!" command. To lose any changes use the ":q!"
+command.
+
+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".
+
+
+5.4 Writing and quitting *write_quit* *save_file*
+
+ *:w* *:write*
+:[range]w[rite][!] Write the specified lines to the current file.
+
+ *: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*
+:[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 give with ":w" it becomes the alternate file. This can be
+used when the write fails and you want to try again later with ":w #".
+
+
+ *:q* *:quit*
+:q[uit] Quit, unless changes have been made or not editing
+ the last file in the argument list.
+
+:q[uit]! Quit always, without writing.
+
+:cq Quit always, without writing, and return an error
+ code. Used for Manx's QuickFix mode (see 5.5
+ |quickfix|).
+
+ *:wq*
+:wq Write the current file and exit (unless editing the
+ last file in the argument list or the file is
+ read-only).
+
+:wq! Write the current file and exit.
+
+:wq {file} Write to {file}. Exit if not editing the last
+ file in the argument list.
+
+:wq! {file} Write to {file} and exit.
+
+:[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.
+
+ *:exi* *:exit*
+:[range]exi[t][!] [file]
+ Same as :xit.
+
+ *ZZ*
+ZZ Write current file, if modified, and exit (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).
+
+ *timestamp*
+Vim remembers the timestamp of the file when you start editing it. When you
+write a file the timestamp is checked. If the file has been changed since you
+started editing it, Vim will ask you 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.
+
+ *backup*
+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. On Unix systems the file is copied, on other systems the file is
+renamed. 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 '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.
+
+The directories given with the 'backupdir' option is used to put the backup
+file in. (default: same directory as the written file).
+
+On Unix systems:
+When you write to an existing file, that file is truncated and then filled
+with the new text. This means that protection bits, owner and symbolic links
+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.
+
+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_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.
+
+ *textmode_write*
+If the 'textmode' option is on <CR><NL> is used for end-of-line. This is
+default for MS-DOS, Win32 and OS/2. On other systems the message "[textmode]"
+is shown to remind you that an usual end-of-line marker was used. If the
+'textmode' is not set NL is used for end-of-line. On MS-DOS, Win32 and OS/2
+the message "[notextmode]" is shown. See also |textmode_io| and the
+'textmode' and 'textauto' options.
+
+
+5.5 Using the QuickFix mode *quickfix*
+
+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 then 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 you should do the
+following:
+- Set the CCEDIT environment variable with the command
+ mset "CCEDIT=vim -e"
+- 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 below. 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.
+
+If you are using another compiler you should save the error messages in a
+file and start Vim with "vim -e 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 below).
+
+The following commands can be used if you are in QuickFix mode:
+
+ *:cc*
+:cc [nr] Display error [nr]. If [nr] is omitted, the same
+ error is displayed again. {not in Vi}
+
+ *:cn* *:cnext*
+:[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 the the [count] next error. {not in Vi}
+
+:[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 the the [count] previous error. {not in Vi}
+
+ *:cq* *:cquit*
+:cq[uit] Quit Vim with an error code, so that the compiler
+ will not compile the same file again. {not in Vi}
+
+ *: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 -e 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] {not in Vi}
+
+ *:cl* *:clist*
+:cl[ist] List all errors that inlcude a file name. {not in Vi}
+
+:cl[ist]! List all errors. {not in Vi}
+
+ *:mak* *:make*
+:mak[e] [arguments] 1. If the 'autowrite' option is on, write any changed
+ buffers
+ 2. Any existing 'errorfile' is deleted.
+ 3. The program given with the 'makeprg' option is
+ started (default "make") with the optional
+ [arguments] and the output is saved in
+ 'errorfile' (for Unix it is also echoed on the
+ screen).
+ 4. The 'errorfile' is then read and the first error
+ is jumped to.
+ 5. The 'errorfile' is deleted.
+ {not in Vi}
+
+The name of the file can be set with the 'errorfile' option. The default is
+"AztecC.Err" for the Amiga and "errors.vim" for other systems. The format of
+the file from the 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
+
+ *errorformat*
+Another compiler is likely to use a different format. You should set the
+'errorformat' option to a scanf-like string that describes the format.
+First, you need to know how scanf works. Look in the documentation of your
+C compiler. Vim will understand eight conversion characters. Others are
+invalid.
+ %f file name (finds a string)
+ %l line number (finds a number)
+ %c column number (finds a number)
+ %t error type (finds a single character)
+ %n error number (finds a number)
+ %m error message (finds a string)
+ %*<conv> any scanf non-assignable conversion
+ %% the single '%' character
+
+Examples:
+%f>%l:%c:%t:%n:%m" for the AztecC.Err file
+%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 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
+
+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.
+
+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. Be careful: "%f%l" will
+include everything up to the first '%' in the file name. If the "%f" or "%m"
+is at the end, everything up to the end of the line is included.
+
+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).
+
+If a line is detected that does not completely match the '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.
+
+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.
+
+ *:make_makeprg*
+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 filename without
+extension, for example ":set makeprg=make\ #<.o".
+
+[arguments] is anything that is typed after ":make".
+{shellpipe} is the 'shellpipe' option.
+{errorfile} is the 'errorfile' option.
+
+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.
+
+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.
+
+On the Amiga, if Vim was started from the compiler, the :sh and :! commands
+will not work, because Vim is then running in the same process as the
+compiler and these two commands may guru the machine then.
+
+If you insert or delete lines, mostly the correct error location is still
+found because hidden marks are used (Manx's Z editor does not do this).
+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.
+
+
+5.6 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) sets some options for
+editing binary files ('binary' on, 'textwidth' to 0, 'textmode' and
+'textauto' off, '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 end-of-line characters, 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 'textmode' and 'textauto' options are off before loading the
+ file. In 'textmode' 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>. The
+ 'modelines' option should also be off, because there may be a string like
+ ":vi:" in the file that would give unpredictable results.
+- <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 end of line.
+- Vim normally appends an end-of-line character at the end of the file if
+ there is none. Setting the 'binary' option prevents this. If you want to
+ add the final end-of-line, set the 'endofline' option. You can also read the
+ value of this option to see if there was an end-of-line character for the
+ last line (you cannot see this in the text).
+
+
+5.7 Automatic commands *autocommand*
+
+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, 'cindent' can be set for files matching *.c, and unset
+otherwise. Autocommands can be used to edit compressed files. These commands
+are normally put in your .vimrc or .exrc file. {All this is not in Vi}
+
+WARNING: Using autocommands is very powerful, but may lead to unexpected side
+effects. Be careful not to destroy your text.
+- It's a good idea to first do some testing on a 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 (to be able to do recovery in some rare cases).
+ It's a good idea to use the same autocommands for the File* and Buf* events
+ when possible.
+
+The autocommand feature is only included if Vim has been compiled with AUTOCMD
+defined. If the output of ":version" contains "+autocmd" it is included (this
+is the default), if it contains "-autocmd" then the autocommand feature
+doesn't work.
+
+Note: This command cannot be followed by another command, since any '|' is
+considered part of the command.
+
+ *:au* *:autocmd*
+:au[tocmd] {event} {pat} {cmd}
+ Add {cmd} to the list of commands that will be
+ automatically executed on {event} for a file matching
+ {pat}. It is not added if it is already there (as may
+ happen when .vimrc is sourced again). The order of
+ entering {cmd} and {pat} is important.
+
+:au[tocmd] {event} {pat}
+ Show the auto-commands associated with {event} and
+ {pat}.
+
+:au[tocmd] * {pat} Show the auto-commands associated with pat} for all
+ events.
+
+:au[tocmd] {event} Show all auto-commands for {event}.
+
+:au[tocmd] Show all auto-commands.
+
+:au[tocmd]! {event} {pat} {cmd}
+ Remove all auto-commands associated with {event} and
+ {pat}, and add the command {cmd}.
+
+:au[tocmd]! {event} {pat}
+ Remove all auto-commands associated with {event} and
+ {pat}.
+
+:au[tocmd]! * {pat} Remove all auto-commands associated with {pat} for all
+ events.
+
+:au[tocmd]! {event} Remove ALL auto-commands for {event}.
+
+:au[tocmd]! Remove ALL auto-commands.
+
+ *:do* *:doautocmd*
+:do[autocmd] {event} [fname]
+ Apply the autocommands matching [fname] (default:
+ current file name) for {event} to the current buffer.
+ This can be used when the current file name does not
+ match the right pattern, after changing settings, or
+ to execute autocommands for a certain event.
+
+These events are recognized. Case is ignored, for example "BUFread" and
+"bufread" can be used 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*
+BufReadPre When starting to edit a new buffer, before
+ reading the file into the buffer. Not used
+ when starting to edit a new file.
+ *BufRead* *BufReadPost*
+BufRead or BufReadPost When starting to edit a new buffer, after
+ reading the file into the buffer, before
+ executing the modelines. This does NOT work
+ for ":r file". Not used when starting to edit
+ a new file.
+ *FileReadPre*
+FileReadPre Before reading a file with a ":read" command.
+ *FileReadPost*
+FileReadPost After reading a file with a ":read" command.
+ Note that the '[ and '] marks are set to the
+ first and last line of the read, this can be
+ used to operate on the just read lines.
+ *FilterReadPre*
+FilterReadPre Before reading a file from a filter command.
+ The file name of the current buffer is used to
+ match with the pattern, 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.
+ Like FilterReadPre, the file name of the
+ current buffer is used.
+ *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).
+ *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.
+ *FileAppendPre*
+FileAppendPre Before appending to a file.
+ *FileAppendPost*
+FileAppendPost After appending to a file.
+ *FilterWritePre*
+FilterWritePre Before writing a file for a filter command.
+ The file name of the current buffer is used to
+ match with the pattern, not the name of the
+ temporary file that is the input for the
+ filter command.
+ *FilterWritePost*
+FilterWritePost After writing a file for a filter command.
+ Like FilterWritePre, the file name of the
+ current buffer is used.
+ *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.
+ *WinEnter*
+WinEnter After entering another window. Not done for
+ the first window, when Vim is just started.
+ Useful for setting the window height.
+ If the window is for another buffer, the
+ BufEnter autocommands are executed after the
+ WinEnter autocommands.
+ *WinLeave*
+WinLeave Before leaving to another window. If the
+ window to be entered is for a different
+ buffer, the BufLeave autocommands are executed
+ before the WinLeave autocommands.
+ *VimLeave*
+VimLeave Before exiting Vim, just before writing the
+ .viminfo file. There is no VimEnter event,
+ because you can use the .vimrc for that.
+
+For READING FILES there are three possible pairs of events, only one pair is
+used at a time:
+BufNewFile starting to edit a non-existant file
+BufReadPre BufReadPost starting to edit an existing file
+FilterReadPre FilterReadPost read the temp file with filter output
+FileReadPre FileReadPost any other file read
+
+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.
+Careful: '[ and '] will change when using commands that change the buffer.
+"<afile>" can be used for the file name that is being read, in commands where
+a file name is expected (where you can also use "%" for the current file
+name) |:<afile>|.
+
+Examples for reading compressed files:
+ :autocmd! BufReadPre,FileReadPre *.gz set bin
+ :autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip
+ :autocmd BufReadPost,FileReadPost *.gz set nobin
+
+NOTE: When using the examples given, any existing autocommands for the same
+event/pattern combination will be removed, because of the '!'.
+
+For WRITING FILES there are four possible pairs of events, only one pair is
+used at a time:
+BufWritePre BufWritePost writing the whole buffer
+FilterWritePre FilterWritePost writing to the temp file with filter input
+FileAppendPre FileAppendPost appending to a file
+FileWritePre FileWritePost any other file write
+
+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 the *WritePre event the '[ mark is set to the first line that will be
+written, the '] mark to the last line.
+Careful: '[ and '] will change when using commands that change the buffer.
+"<afile>" can be used for the file name that is being written, in commands
+where a file name is expected (where you can also use "%" for the current file
+name) |:<afile>|.
+
+Examples for writing compressed files:
+ :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
+
+("<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).
+
+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 not to be modified after changing it, reset the
+'modified' option. This makes it possible to exit the buffer with ":q"
+instead of ":q!".
+
+Autocommands do not nest. If you use ":r" or ":w" in an autocommand, the
+BufRead and BufWrite autocommands are not executed for those commands. It's
+also not possible to use the ":au" command in an autocommand (that could be a
+self-modifying command!).
+
+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.
+
+Note: When doing a ":read file" command and the last line in the file does not
+have an end-of-line character, this is remembered. When executing the
+FileReadPost autocommands and the same line is written again as the last line
+in a file, no end-of-line character is written if 'binary' is set. This makes
+a filter command on the just read lines write the same file as was read.
+
+Multiple patterns may be given 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++)^M{^M}^[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.
+
+To read a skeleton file for new C files:
+
+ :autocmd BufNewFile *.c 0r ~/.skeleton.c
+ :autocmd BufNewFile *.h 0r ~/.skeleton.h
+
+To insert the current date and time in a *.html file when writing it:
+
+:autocmd BufWritePre,FileWritePre *.html ks|1,20g/Last modification: /normal f:lD:read !date^MkJ's
+
+(to insert the ^M type CTRL-V CTRL-M)
+You need to have a line "Last modification: <date time>" in the first 20 lines
+of the file for this to work. The <date time> (and anything in the same line
+after it) will be replaced with the current date and time. Explanation:
+ ks mark current position with mark 's'
+ 1,20g/pattern/ find lines that contain the pattern
+ normal f: find the ':'
+ lD delete the old date and time
+ !date^M read the current date and time into the next line
+ kJ Join the date and time with the previous line
+ 's return the cursor to the old position
+
+When entering :autocmd on the command line, completion of events and command
+names may be done (with <Tab>, CTRL-D, etc.) where appropriate.
+
+All matching auto-commands will be executed in the order that they were
+specified. It is recommended that your first auto-command 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
+auto-command it will override these. But if there is no other matching
+auto-command, then at least your default settings are recovered (if entering
+this file from another for which auto-commands did match). Note that "*" will
+also match files starting with ".", unlike Unix shells.
+
+Normally the file pattern is tested for a match against just the tail part of
+the file name (without its leading directory path), but if a path separator
+character (eg '/' on Unix) appears in the pattern, then it will be tested
+against the full file name. For example:
+
+ :autocmd BufRead */vim/src/* set wrap
+
+
+6. Cursor motions *cursor_motions*
+=================
+
+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).
+
+ *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 lower case
+ |gU| gU make upper case
+ |!| ! filter through an external program
+ |=| = filter through 'equalprg' or C-indenting if empty
+ |Q| Q text formatting (obsolete)
+ |gq| gq text formatting
+ |>| > shift right
+ |<| < shift left
+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.
+ 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.
+However, there are some exceptions.
+ 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: "}" ends at the first line after a paragraph,
+ but "V}" 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.
+
+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|.
+
+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).
+
+NOTE: 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.
+
+
+6.1 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).
+ 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).
+
+ *0*
+0 To the first character of the line (exclusive). When
+ moving up or down, stay in same screen column (if
+ possible).
+
+ *<Home>*
+<Home> To the first character of the line (exclusive). 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).
+
+ *$* *<End>*
+$ or <End> To the end of line and [count - 1] lines downward
+ (inclusive).
+
+ *g0* *g<Home>*
+g0 or g<Home> When lines wrap ('wrap on): To the first character of
+ the screen line (exclusive). 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). 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}
+
+ *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 righmost
+ 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.
+ {not in Vi}
+
+ *bar*
+| To screen column [count] in the current line
+ (exclusive).
+
+ *f*
+f{char} To [count]'th occurrence of {char} to the right. The
+ cursor is placed on {char} (inclusive).
+
+ *F*
+F{char} To the [count]'th occurrence of {char} to the left.
+ The cursor is placed on {char} (inclusive).
+
+ *t*
+t{char} Till before [count]'th occurrence of {char} to the
+ right. The cursor is placed on the character left of
+ {char} (inclusive).
+
+ *T*
+T{char} Till after [count]'th occurrence of {char} to the
+ left. The cursor is placed on the character right of
+ {char} (inclusive).
+
+ *;*
+; 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 accross line boundaries.
+
+
+6.2 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). Differs
+ from 'k' when lines wrap. {not in Vi}
+
+gj or *gj* *g<Down>*
+g<Down> [count] display lines downward (exclusive). Differs
+ from 'j' when lines wrap. {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).
+
+<C-End> or *G* *<C-End>*
+G Goto line [count], default last line, on the first
+ non-blank character (linewise). If 'startofline' not
+ set, keep the same column.
+
+<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 (last) specified line number
+ (cannot be used with an operator).
+
+ *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 / 100. See also 'startofline'
+ option. {not in Vi}
+
+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.
+
+
+6.3 Word motions *word_motions*
+
+<S-Right> or *<S-Right>* *w*
+w [count] words forward (exclusive).
+
+ *W*
+W [count] WORDS forward (exclusive).
+
+ *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).
+
+ *B*
+B [count] WORDS backward (exclusive).
+
+ *ge*
+ge Backward to the end of word [count] (inclusive).
+
+ *gE*
+gE Backward to the end of WORD [count] (inclusive).
+
+ *word* *WORD*
+These commands move over words or WORDS. 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, end of line). 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.
+
+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.
+
+
+6.4 Text object motions *object_motions*
+
+ *(*
+( [count] sentences backward (exclusive).
+
+ *)*
+) [count] sentences forward (exclusive).
+
+ *{*
+{ [count] paragraphs backward (exclusive).
+
+ *}*
+} [count] paragraphs forward (exclusive).
+
+ *]]*
+]] [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. {Vi: two spaces} Any number of closing ')',
+']', '"' and ''' characters my appear after the '.', '!' or '?' before the
+spaces or end of line. A paragraph and section boundary is also a sentence
+boundary.
+
+ *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.
+
+ *section*
+A section begins after a form-feed 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".
+
+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.
+
+
+6.5 Text object selection *object_select*
+
+ *v_a*
+a select [count] words (see |word|). {not in Vi}
+
+ *v_A*
+A select [count] WORDS (see |WORD|). {not in Vi}
+
+ *v_s*
+s select [count] sentences (see |sentence|). {not in Vi}
+
+ *v_p*
+p select [count] paragraphs (see |paragraph|). {not in
+ Vi}
+
+ *v_S*
+S select [count] blocks, from "[count] [(" to the
+ matching ')' (see |[(|). {not in Vi}
+
+ *v_P*
+P select [count] blocks, from "[count] [{" to the
+ matching '}' (see |[{|). {not in Vi}
+
+These object selection commands can only be used in Visual mode and after an
+operator.
+
+When used after an operator:
+For non-block objects:
+ 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 a block object:
+ The operator applies to the block excluding the surrounding braces.
+ If the cursor was on one of the braces (or on the indent before '{' or
+ '}) they 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. 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|
+ "da" delete word *da*
+ "dA" delete WORD (see |WORD|) *dA*
+ "dd" delete line |dd|
+ "ds" delete sentence *ds*
+ "dS" delete '(' ')' block *dS*
+ "dp" delete paragraph *dp*
+ "dP" delete '{' '}' block *dP*
+
+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 "da": "dw"
+deletes from the cursor position to the start of the next word, "da" deletes
+the word under the cursor and the space after or before it.
+
+
+6.6 Pattern searches *pattern_searches*
+
+ */*
+/{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 (see
+ below). (linewise).
+
+ */<CR>*
+/<CR> Search forward for the [count]'th latest used
+ pattern with latest used {offset}.
+
+//{offset}<CR> Search forward for the [count]'th latest used
+ 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 (see below) (linewise).
+
+ *?<CR>*
+?<CR> Search backward for the [count]'th latest used
+ pattern with latest used {offset}.
+
+??{offset}<CR> Search backward for the [count]'th latest used
+ pattern with new {offset}. If {offset} is empty no
+ offset is used.
+
+ *n*
+n Repeat the latest "/" or "?" [count] times. {Vi: no
+ count}
+
+ *N*
+N Repeat the latest "/" or "?" [count] times in
+ opposite direction. {Vi: no count}
+
+ *star*
+* Search forward for the [count]'th occurrence of the
+ keyword after or under the cursor (exclusive). Only
+ whole keywords are search for, like with the command
+ "/\<keyword\>". If there is no keyword after or
+ under the cursor, any non-blank word is used to
+ search for. {not in Vi}
+
+ *#*
+# Same as "*", but search backward. The English pound
+ sign (character 163) also works. {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}
+
+ HINT: If you want to search for something else than a
+ whole word, you could use these mappings, to search
+ for Visually highlighted text:
+ :vmap / y/<C-R>"<CR>
+ :vmap ? y?<C-R>"<CR>
+ (<> notation, see |<>|).
+
+ *gd*
+gd Goto local Declaration. When the cursor is on a local
+ variable, this command will jump to its declaration.
+ First a search is made for the end of the previous
+ function, just like "[]". If it is not found the
+ search stops in line 1. From this position a search is
+ made 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|. {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.
+
+While typing the search pattern the current match will be shown if the
+'incsearch' option is on.
+
+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}
+
+ *search_offset*
+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] characters to the right of the start (begin) of the match
+ b[-num] [num] characters to the left of the start (begin) of the match
+
+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.
+
+ *//;*
+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 occurence of "test 1", and then the first
+occurence 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.
+
+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.
+
+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).
+
+The "*" and "#" commands search for the keyword currently under the cursor.
+If there is no keyword under the cursor, the first one to the right is used.
+This keyword may only contain letters and characters in 'iskeyword'. 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). If there is no keyword under or after the cursor, a search is done
+for any word under or after the cursor. Blanks (<Tab>s and/or <Space>s) are
+then recognized as delimiters for the word.
+
+
+The definition of a pattern: *search_pattern*
+
+Patterns may contain special characters, depending on the setting of the
+'magic' option.
+
+1. A pattern is one or more branches, separated by "\|". It matches anything
+ that matches one of the branches. Example: "foo\|bar" matches "foo" and
+ "bar".
+
+2. A branch is one or more pieces, concatenated. It matches a match for the
+ first, followed by a match for the second, etc. Example: "foo[0-9]bar",
+ first match "foo", then a digit and then "bar".
+
+3. A piece is an atom, possibly followed by:
+ 'magic' 'nomagic'
+ option option
+ * \* matches 0 or more of the preceding atom
+ \+ \+ matches 1 or more of the preceding atom {not
+ in Vi}
+ \= \= matches 0 or 1 of the preceding atom {not in
+ Vi}
+ Examples:
+ .* .\* matches anything, also empty string
+ ^.\+$ ^.\+$ matches any non-empty line
+ foo\= foo\= matches "fo" and "foo"
+
+
+4. An atom can be:
+ - One of these five:
+ magic nomagic
+ ^ ^ at beginning of pattern, matches start of
+ line
+ $ $ at end of pattern or in front of "\|",
+ matches end of line
+ . \. matches any single character
+ \< \< matches the beginning of a word
+ \> \> matches the end of a word
+ \i \i matches any identifier character (see
+ 'isident' option) {not in Vi}
+ \I \I like "\i", but excluding digits {not in Vi}
+ \k \k matches any keyword character (see
+ 'iskeyword' option) {not in Vi}
+ \K \K like "\k", but excluding digits {not in Vi}
+ \f \f matches any file name character (see
+ 'isfname' option) {not in Vi}
+ \F \F like "\f", but excluding digits {not in Vi}
+ \p \p matches any printable character (see
+ 'isprint' option) {not in Vi}
+ \P \P like "\p", but excluding digits {not in Vi}
+ \e \e <Esc>
+ \t \t <Tab>
+ \r \r <CR>
+ \b \b <BS>
+ ~ \~ matches the last given substitute pattern
+ \(\) \(\) A pattern enclosed by escaped parentheses
+ (e.g., "\(^a\)") matches that pattern
+ x x A single character, with no special meaning,
+ matches itself
+ \x \x A backslash followed by a single character,
+ with no special meaning, matches the single
+ character
+ [] \[] A range. This is a sequence of characters
+ enclosed in "[]" or "\[]". It matches any
+ single character from the sequence. If the
+ sequence begins with "^", it matches any
+ single character NOT in the sequence. 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. To include a
+ literal "]" in the sequence, make it the
+ first character (following a possible "^").
+ E.g., "[]xyz]" or "[^]xyz]". To include a
+ literal '-', make it the first or last
+ character.
+
+If the 'ignorecase' option is on, the case of letters is ignored.
+
+It is impossible to have a pattern that contains a line break.
+
+Examples:
+^beep( Probably the start of the C function "beep".
+
+[a-zA-Z]$ Any alphabetic character at the end of a line.
+
+\<\I\i or
+\(^\|[^a-zA-Z0-9_]\)[a-zA-Z_]\+[a-zA-Z0-9_]*
+ A C identifier (will stop in front of it).
+
+\(\.$\|\. \) A period followed by end-of-line or a space.
+ Note that "\(\. \|\.$\)" does not do the same,
+ because '$' is not end-of-line in front of '\)'.
+ This was done to remain Vi-compatible.
+
+[.!?][])"']*\($\|[ ]\) A search pattern that finds the end of a sentence,
+ with almost the same definition as the ")" command.
+
+Technical detail:
+<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}
+
+
+6.7 Various motions *various_motions*
+
+ *m*
+m<a-zA-Z> Set mark <a-zA-Z> at cursor position (does not move
+ the cursor, this is not a motion command).
+
+ *:ma* *:mark*
+:[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-z> To the first non-blank character on the line with
+ mark <a-z> (linewise).
+ *'A* *'0*
+'<A-Z0-9> To the first non-blank character on the line with
+ mark <A-Z0-9> in the correct file (linewise when in
+ same file, not a motion command when in other file).
+ {not in Vi}
+
+ *`* *`a*
+`<a-z> To the mark <a-z> (exclusive).
+ *`A* *`0*
+`<A-Z0-9> To the mark <A-Z0-9> in the correct file (exclusive
+ when in same file, not a motion command when in
+ other file). {not in Vi}
+
+ *:marks*
+:marks List all the current marks (not a motion command).
+ {not in Vi}
+
+: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, change a character
+in a line or delete a line that contains a mark, that mark is erased.
+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. See |viminfo_file_marks|.
+
+ *'[*
+'[ To the first non-blank character on the first line
+ of the previously operated, inserted or putted text.
+ {not in Vi}
+
+ *`[*
+`[ To the first character of the previously operated,
+ inserted or putted text. {not in Vi}
+
+ *']*
+'] To the first non-blank character on the last line of
+ the previously operated, inserted or putted text.
+ {not in Vi}
+
+ *`]*
+`] To the last character of the previously operated,
+ inserted or putted 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
+operator or put command has been used yet in the current file.
+
+ *'<*
+'< To the first non-blank character on the first line
+ of the last selected Visual area. {not in Vi}.
+
+ *`<*
+`< To the first character of the last selected Visual
+ area. {not in Vi}.
+
+ *'>*
+'> To the first non-blank character on the last line
+ of the last selected Visual area. {not in Vi}.
+
+ *`>*
+`> To the last character of the last selected Visual
+ area. {not in Vi}.
+
+ *''*
+'' To the first non-blank character of the line where
+ the cursor was before the latest jump (linewise).
+
+ *``*
+`` To the position before latest jump (exclusive).
+
+ *'"*
+'" To the first non-blank character of the line where
+ the cursor was the last time the current buffer was
+ exited (linewise). {not in Vi}.
+
+ *`"*
+`" To the cursor position when last exiting the current
+ buffer (exclusive). {not in Vi}.
+
+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}
+
+<Tab> or *CTRL-I* *<Tab>*
+CTRL-I Go to [count] newer cursor position in jump list
+ (not a motion command). {not in Vi}
+
+ *:ju* *:jumps*
+:ju[mps] Print the jump list (not a motion command). {not in
+ Vi}
+
+ *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.
+
+For example, after three jump commands you have this jump list:
+
+ jump line file
+ 1 1 -current-
+ 2 70 -current-
+ 3 1154 -current-
+>
+
+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 file
+ 1 1 -current-
+ 2 70 -current-
+> 3 1154 -current-
+ 4 1167 -current-
+
+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.
+
+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.
+
+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 file
+ 1 1 -current-
+ 2 70 -current-
+ 3 1167 -current-
+ 4 1154 -current-
+>
+
+The line numbers will be adjusted for deleted and inserted lines. This fails
+if you stop editing a file without writing, like with ":n!".
+
+ *%*
+% Find the next item in this line after or under the
+ cursor and jump to its match (inclusive). Items can
+ be:
+ ([{}]) parenthesis or (curly/square) brackets
+ /* */ start or end of C-style comment
+ #if, #ifdef, #else, #elif, #endif
+ C preprocessor conditionals
+ Parens and braces preceded with a backslash are
+ ignored. When the '%' character is not present in
+ 'cpoptions', parens and braces inside 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. No count is allowed ({count}%
+ jumps to a line {count} percentage down the file).
+ Using '%' on #if/#else/#endif makes the movement
+ linewise.
+
+ *[(*
+[( go to [count] previous unmatched '('. {not in Vi}
+
+ *[{*
+[{ go to [count] previous unmatched '{'. {not in Vi}
+
+ *])*
+]) go to [count] next unmatched ')'. {not in Vi}
+
+ *]}*
+]} go to [count] next unmatched '}'. {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.
+
+ *[#*
+[# go to [count] previous unmatched "#if" or "#else".
+ {not in Vi}
+
+ *]#*
+]# go to [count] next unmatched "#else" or "#endif". {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 "/*". {not
+ in Vi}
+
+ *]star* *]/*
+]* or ]/ go to [count] next end of a C comment "*/". {not
+ in Vi}
+
+
+ *H*
+H To line [count] from top (Home) of screen (default:
+ first line on the screen) on the first non-blank
+ character (linewise). See also 'startofline' option.
+ Cursor is adjusted for 'scrolloff' option.
+
+ *M*
+M To Middle line of screen, on the first non-blank
+ character (linewise). See also 'startofline' option.
+
+ *L*
+L To line [count] from bottom of screen (default: Last
+ line on the screen) 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}
+
+
+7. Scrolling *scrolling*
+============
+
+Move edit window (the part of the buffer that you see) downwards (this means
+that more lines downwards in the text buffer are 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>*
+<PageDown> or *<PageDown>* *CTRL-F*
+CTRL-F Scroll window [count] pages Forwards (downwards) in
+ the buffer. See also 'startofline' option.
+
+Move edit window (the part of the buffer that you see) upwards (this means
+that more lines upwards in the text buffer are seen):
+
+ *CTRL-Y*
+CTRL-Y Scroll window [count] lines upwards in the buffer.
+
+ *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>*
+<PageUp> or *<PageUp>* *CTRL-B*
+CTRL-B Scroll window [count] pages Backwards (upwards) in the
+ buffer. See also 'startofline' option.
+
+Window repositioning:
+
+ *z* *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}
+
+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 upwards or downwards
+in the buffer. When the window moves upwards in the buffer, the text in the
+window moves downwards on your screen.
+
+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}
+
+For these two 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.
+
+ *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}
+
+For these two commands the cursor is not moved in the text, only the text
+scrolls on the screen.
+
+
+8. Tags and special searches *tags_and_searches*
+============================
+
+8.1 Tags *tag_commands*
+
+ *:ta* *:tag*
+:ta[g][!] {ident} Jump to the definition of {ident}, using the
+ information in the tags file. Put {ident} in the tag
+ stack. See below for [!].
+
+g<LeftMouse> *g<LeftMouse>*
+<C-LeftMouse> *<C-LeftMouse>* *CTRL-]*
+CTRL-] ":ta" to the keyword under or after cursor. Put the
+ keyword in the tag stack. {Vi: identifier after the
+ cursor}
+
+ *v_CTRL-]*
+{Visual}CTRL-] ":ta" to the text that is highlighted. {not in Vi}
+
+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*
+:[count]po[p][!] Jump to [count] older entry in tag stack (default 1).
+ See below for [!]. {not in Vi}
+
+:[count]ta[g][!] Jump to [count] newer entry in tag stack (default 1).
+ See below for [!]. {not in Vi}
+
+ *:tags*
+:tags Show the contents of the tag stack. The active
+ entry is marked with a '>'. {not in Vi}
+
+A tag is an identifier that appears in the "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.
+
+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.
+
+ *tag_priority*
+When there are multiple matches for a tag, this priority is used:
+1. The first matching static tag with a full matching tag for the current
+ file.
+2. The first matching global tag with a full matching tag.
+3. The first matching static tag with a full matching tag for another file.
+4. The first matching static tag with an ignore-case matching tag for the
+ current file.
+5. The first matching global tag with an ignore-case matching tag.
+6. The first matching static tag with an ignore-case matching tag for another
+ file.
+
+ *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 behaviour, set the 't' flag in 'cpoptions'.
+
+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.
+
+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.
+
+A tags file can be created with the external command 'ctags'. It will
+contain a tag for each function. Some versions of 'ctags' will also make a
+tag for each "#defined" macro.
+
+The lines in the tags file should have this format:
+
+ {tag}{separator}{filename}{separator}{command}
+
+{tag} the identifier
+{separator} one or more <Tab> or space characters
+{filename} the file that contains the definition of {tag}
+{command} the Ex command that positions the cursor on the tag.
+
+The identifier normally is the name of a function, but it can be any
+identifier. There is one special form for local (static) functions:
+{filename}:{identifier}. Some ctags programs make use of this to separate
+local (static) functions from global functions.
+(Detail: Vim compares only the last part of the filename and ignores any
+path before it).
+
+ *tag_search*
+The command can be any Ex command, but normally it is a search command like
+ "/^main(argc, argv)"
+If it is a search command, and the search fails, another try is done ignoring
+case. If that fails too, a search is done for:
+ "^main[ \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_].*main[ \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}.
+
+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.
+
+ *emacs_tags*
+Emacs style tag files are supported if Vim was compiled with EMACS_TAGS
+defined. Check the output of ":version", if it contains "+emacs_tags" then it
+was. 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.
+
+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.
+
+
+ *tagstack*
+The tags that you use are remembered in the tag stack. You can print this
+stack with the ":tags" command. The result looks like this:
+
+ # TO tag FROM line in file
+ 1 main 1 harddisk2:text/vim/test
+> 2 FuncA 58 -current-
+ 3 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.
+
+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).
+
+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
+>
+
+
+8.2 Include file searches *include_search*
+
+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|.
+
+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 "\^#[ \t]*define", which is for C
+programs. Also, 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 "\^#[ \t]*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.
+
+ *[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. {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). Without [!] lines that are
+ recognized as comments are skipped. Without [/] only
+ whole words are matched, using the pattern
+ "\<pattern\>". {not in Vi}
+
+ *[I*
+[I Display all lines that contain the keyword under the
+ cursor. File names 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). Without [!] lines that are
+ recognized as comments are skipped. Without [/] only
+ whole words are matched, using the pattern
+ "\<pattern\>". {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. {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). Without [!]
+ lines that are recognized as comments are skipped.
+ Without [/] only whole words are matched, using the
+ pattern "\<pattern\>". {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. {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). Without [!]
+ lines that are recognized as comments are skipped.
+ Without [/] only whole words are matched, using the
+ pattern "\<pattern\>". {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] [/]pattern[/]
+ Like "[d" and "]d", but search in [range] lines
+ (default: whole file). Without [!] lines that are
+ recognized as comments are skipped. Without [/] only
+ whole words are matched, using the pattern
+ "\<pattern\>". {not in Vi}
+
+ *[D*
+[D Display all macro definitions that contain the macro
+ under the cursor. File names 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][!] [/]pattern[/]
+ Like "[D" and "]D", but search in [range] lines
+ (default: whole file). Without [!] lines that are
+ recognized as comments are skipped. Without [/] only
+ whole words are matched, using the pattern
+ "\<pattern\>". {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] [/]pattern[/]
+ Like "[ CTRL-D" and "] CTRL-D", but search in
+ [range] lines (default: whole file). Without [!]
+ lines that are recognized as comments are skipped.
+ Without [/] only whole words are matched, using the
+ pattern "\<pattern\>". {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] [/]pattern[/]
+ Like "CTRL-W d", but search in [range] lines
+ (default: whole file). Without [!] lines that are
+ recognized as comments are skipped. Without [/] only
+ whole words are matched, using the pattern
+ "\<pattern\>". {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}
+
+
+9. Inserting text *inserting*
+=================
+
+The following commands can be used to insert new text into the buffer. They
+can all be undone. The non-Ex commands can be repeated with the "." command.
+
+ *a*
+a Append text after the cursor [count] times.
+
+ *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.
+
+ *I*
+I Insert text before the first CHAR on the line
+ [count] times.
+
+ *gI*
+gI Insert text in column 1 [count] times. {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. They can be undone and
+repeated. You can end Insert mode with <Esc>. See the section "Insert and
+Replace mode" |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.
+
+ *:r* *: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}".
+
+ *textmode_read*
+The <NL> character is recognized as end-of-line marker. If the 'textmode'
+option is on, a <CR> in front of an <NL> is ignored and a CTRL-Z at the end
+of the file is ignored. The 'textmode' option is default on for MS-DOS, Win32
+and OS/2.
+
+If the 'textauto' option is on Vim tries to recognize the type of end-of-line
+marker (see |textmode_io|). However, the 'textmode' option will not be
+changed. Only while reading the file the text mode is used or not.
+
+On non-MS-DOS, Win32, and OS/2 systems the message "[textmode]" is shown if a
+file is read in text mode, to remind you that something unusual is done. On
+MS-DOS, Win32, and OS/2 the message "[notextmode]" is shown if a file is read
+without text mode.
+
+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.
+
+
+10. Deleting text *deleting*
+=================
+
+["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". See |:fixdel| if the <Del> key does not do what
+ you want. Also see |'whichwrap'|. {<Del> not in Vi}
+
+ *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 is moved over [into register x].
+ See below for exception.
+
+ *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*
+{Visual}["x]d Delete the highlighted text [into register x] (see
+ the chapter on Visual mode |Visual_mode|). {not in
+ Vi}
+
+{Visual}["x]X or *v_X* *v_D*
+{Visual}["x]D Delete the highlighted lines [into register x] (see
+ the chapter on Visual mode |Visual_mode|). {not in
+ Vi}
+
+ *:d* *: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. They can be repeated with the "." command
+(except ":d") and undone. 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 before the start
+and after the end are only blanks, the delete becomes linewise. This means
+that the blank line that would remain is also deleted.
+
+
+ *J*
+J Join [count] lines, with a minimum of two lines.
+
+ *v_J*
+{Visual}J Join the highlighted lines, with a minimum of two
+ lines. {not in Vi}
+
+ *:j* *:join*
+:[range]j[oin][!] Join [range] lines. Same as "J", except when [!] is
+ given, then no spaces will be inserted or deleted.
+ When [range] is given and the start and end of the
+ range are equal, nothing happens. Default is to join
+ two lines.
+
+:[range]j[oin][!] {count}
+ Join {count} lines, starting with [range] (default:
+ current line |cmdline_ranges|). Same as "J", except
+ when [!] is given, then no spaces will be inserted
+ or deleted.
+
+These commands delete the newline between lines. This has the effect of
+joining them into one line. They can be repeated (except ":j") and undone.
+
+One space is inserted in place of the <NL>, unless the line ended with a
+space, <Tab> or the next line started with a ')'. If the next line has
+leading white space it is deleted first. If the 'joinspaces' option is on,
+two spaces are inserted after a period.
+
+
+11. Changing text *changing*
+=================
+
+The following commands can be used to change text, that is delete some text
+and insert something else, with one command. They can all be undone. The
+non-Ex commands can be repeated with the "." command.
+
+
+11.1 Delete and insert *delete_insert*
+
+ *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.
+
+ *c*
+["x]c{motion} Delete {motion} text [into register x] and start
+ insert.
+
+ *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" (not linewise).
+
+{Visual}["x]c or *v_c* *v_r*
+{Visual}["x]r Delete the highlighted text [into register x] and
+ start insert (see the chapter on Visual mode
+ |Visual_mode|). {not in Vi}
+
+{Visual}["x]C or *v_C* *v_R*
+{Visual}["x]R Delete the highlighted lines [into register x] and
+ start insert (see the chapter on Visual mode
+ |Visual_mode|). {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 Insert or Replace mode is exited.
+- 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.
+
+See |registers| for an explanation of registers.
+
+Replace mode is just like Insert mode, except that for every character you
+enter, one character is deleted. If the end of a line is reached, further
+characters are appended (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" 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}
+
+
+11.2 Simple changes *simple_change*
+
+ *r*
+r{char} Replace the character under the cursor with {char}. If
+ {char} is a <CR> or <NL> the character will be
+ replaced with a line break. Replacing with a real <CR>
+ can be done by using CTRL-V <CR>. CTRL-V <NL> will
+ replace with a <Nul>. {Vi: CTRL-V <CR> still replaces
+ with a line break, cannot replace something with a
+ <CR>}
+ If a [count] is given that many characters will be
+ replaced with [count] {char}s. When {char} is a <CR>
+ or <NL> only one is inserted. "5r<CR>" replaces five
+ characters with a single line break;
+ When replacing with a <CR> or <NL> autoindenting is
+ done. This works just like deleting the characters
+ that are replaced and then doing "i<CR><Esc>".
+
+ *~*
+~ '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}
+
+ *v_~*
+{Visual}~ switch case of highlighted text (see the chapter on
+ Visual mode |Visual_mode|). {not in Vi}
+
+ *v_U*
+{Visual}U Make highlighted text uppercase (see the chapter on
+ Visual mode |Visual_mode|). {not in Vi}
+
+ *gU*
+gU{motion} Make {motion} text uppercase. {not in Vi}
+
+ *v_u*
+{Visual}u Make highlighted text lowercase (see the chapter on
+ Visual mode |Visual_mode|). {not in Vi}
+
+ *gu*
+gu{motion} Make {motion} text lowercase. {not in Vi}
+
+ *CTRL-A*
+CTRL-A Add [count] to the number at or after the cursor.
+ {not in Vi}
+
+ *CTRL-X*
+CTRL-X Subtract [count] from the number at or after the
+ cursor. {not in Vi}
+
+The CTRL-A and CTRL-X commands work for (signed) decimal numbers and
+unsigned octal and hexadecimal numbers. Numbers starting with '0x' or '0X'
+are assumed to be hexadecimal. To decide whether the hexadecimal number
+should be printed uppercase or not, the case of the rightmost letter in the
+number is considered. If there is no letter in the current number, the
+previously detected case is used. Numbers starting with a '0' are considered
+to be octal. Other numbers are decimal and may be preceded with a minus
+sign. If the cursor is on a number, that one will be used. Otherwise the
+number right of the cursor will be used.
+
+For octal and hexadecimal numbers with leading zeros, the number of
+characters in the number remains equal (when possible). When doing CTRL-A on
+"0077" it becomes "0100", CTRL-X on "0x0100" becomes "0x00ff". Note that
+when there are no leading zeros this does not work, so CTRL-X on "0x100"
+results in "0xff". Note that decimal numbers with leading zeros are
+impossible, because they are recognized as octal numbers.
+
+The CTRL-A command is very useful in a macro. Example: How to make a
+numbered list.
+
+1. Create the first entry. The entry should start 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
+
+ *<*
+<{motion} Shift the {motion} lines one 'shiftwidth' leftwards.
+
+ *<<*
+<< Shift [count] lines one 'shiftwidth' leftwards.
+
+ *v_<*
+{Visual}[count]< Shift the highlighted lines [count] 'shiftwidth'
+ leftwards (see the chapter on Visual mode
+ |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 (see the chapter on Visual mode
+ |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 indent within programs.
+The size of the white space which is inserted or deleted can be set with the
+'shiftwidth' option. 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 do anything with 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
+'#', lines starting with '#' will not be shifted right (they are supposed to
+be C preprocessor lines that must stay in column 1).
+
+When the 'expandtab' option is off (this is the default) <Tab>s are used 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, only spaces are
+used. Then you can use ">><<" to replace <Tab>s in the indent by spaces (or
+use ":retab!").
+
+To move a line several 'shiftwidth's use the 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
+
+
+11.3 Complex changes *complex_change*
+
+ *!*
+!{motion}{filter} Filter {motion} text 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} (see the chapter on Visual mode
+ |Visual_mode|). {not in Vi}
+
+:{range}![!]{filter} [!][arg] *:range!*
+ Filter {range} lines through the external program
+ {filter}. The optional bangs are replaced with the
+ latest given command. The optional [arg] is
+ appended. The output of the filter command is
+ temporaryly saved in a file and then read into the
+ buffer. The 'shellredir' option is used to write the
+ output of the filter in the temporary file.
+
+ *=*
+={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 to set the indent of each
+ line |C_indenting|.
+
+ *==*
+== Filter [count] 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|.
+
+ *v_=*
+{Visual}= Filter the highlighted 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|.
+ (see the chapter on Visual mode |Visual_mode|). {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. The commands above can be used to send
+some text through a filter. An example of a filter is "sort", which sorts
+lines alphabetically. The "indent" program is used to pretty indent C programs
+(you need a version of indent that works like a filter, not all versions do
+that). The shell, given with the 'shell' option, is used to execute the
+command (See also the 'shelltype' option). The filter commands can be redone
+with ".". There cannot be a comment (with '"') after the ":!" command.
+
+
+ *:s* *:substitute*
+:[range]s[ubstitute]/{pattern}/{string}/[g][c][r][p] [count]
+ For each line in [range] replace {pattern} with
+ {string}. See below for the flags.
+
+:[range]s[ubstitute] [g][c][r] [count]
+:[range]&[g][c][r] [count] *:&*
+ Repeat last :substitute with same search pattern and
+ substitute string. The flags may be different (see
+ below).
+
+:[range]~[g][c][r] [count] *:~*
+ Repeat last substitute with same substitute string
+ but with last used search pattern. This is like
+ "&r". See explanation for [r] below.
+
+ *&*
+& Synonym for ":s//~/" (repeat last substitute).
+
+The arguments that can be given to the substitute commands:
+[g] All occurrences in the line are replaced. Otherwise only the first
+ occurrence in the line is replaced. If the 'edcompatible' option is
+ on this flag is remembered and toggled each time it is used. It is
+ reset when a new search pattern is given. If the 'gdefault' option
+ is on, this flag is default on, give the [g] to switch it off.
+[c] Each substitute has to be confirmed. The cursor is positioned on the
+ matching string. You can type: *:s_c*
+ 'y' to substitute this match
+ 'n' to skip this match
+ <Esc> to skip this match
+ '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}
+ CTRL-Y to scroll the screen down {not in Vi}.
+ If the 'edcompatible' option is on the [c] flag is remembered and
+ toggled each time it is used. It is reset when a new search pattern
+ is given.
+[r] 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, like "/", the pattern from that command is used.
+[p] Print the line containing the last substitute.
+[count] That many lines are are searched, starting with the last line number
+ in [range] (default current line |cmdline_ranges|).
+
+If the {pattern} for the substitute command is empty, the pattern from the
+last substitute or ":global" command is used. With the [r] flag the pattern
+from the last substitute, ":global" or search command is used.
+
+For compatibility with Vi these two execptions are allowed:
+"\/{string}/" and "\?{string}?" do the same as "//{string}/r".
+"\&{string}&" does the same as "//{string}/".
+
+Instead of the '/' which surrounds the pattern and replacement string, you
+can use any other character, but not an alphanumeric character, '"' or '|'
+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 6.6, "Pattern searches" |search_pattern|.
+
+Some characters in {string} have a special meaning:
+
+magic nomagic action
+ & \& replaced with the whole matched pattern
+ \& & replaced with &
+ \0 replaced with the whole matched pattern
+ \1 replaced with the matched pattern in the first pair of ()
+ \2 replaced with the matched pattern in the second pair of ()
+ .. ..
+ \9 replaced with the matched pattern in the ninth pair of ()
+ ~ \~ replaced with the {string} of the previous substitute
+ \~ ~ replaced with ~
+ \u next character made uppercase
+ \U following characters made uppercase
+ \l next character made lowercase
+ \L following characters made lowercase
+ \e end of /u, /U, /l and /L
+ \E end of /u, /U, /l and /L
+ <CR> split line in two at this point
+ \r idem
+ \n <NL>
+ \b <BS>
+ \t <Tab>
+ CTRL-V <CR> insert a carriage-return (CTRL-M)
+
+Examples:
+:s/a\|b/xxx\0xxx/g modifies "a b" in "xxxaxxx xxxbxxx"
+:s/\([abc]\)\([efg]\)/\2\1/g modifies "af fa bg" in "fa fa gb"
+:s/abcde/abc^Mde/ modifies "abcde" in "abc", "de" (two lines)
+:s/$/^V^M/ modifies "abcde" in "abcde^M"
+
+Note: To insert a ^M you have to type CTRL-V <CR>. To insert a ^V you have
+to type CTRL-V CTRL-V. So to insert the ^V^M in the last example you have to
+type CTRL-V CTRL-V CTRL-V <CR>.
+
+Because CTRL-V <CR> inserts a <CR>, it is impossible to insert a CTRL-V just
+in front of a line break. You will have to split it up in two parts:
+ :s/foo/^Vxxxx/
+ :s/xxxx/^M/
+
+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" in "ax bx x x"
+
+ *:ret* *:retab*
+:[range]ret[ab][!] [new_tabstop]
+ All sequences of white-space containing a tab are
+ replaced with new strings of white-space using the new
+ tabstop value given. If no new tabstop size is
+ given, the current value of 'tabstop' is used. With
+ !, strings of normal spaces will also be replace with
+ tabs where appropriate. With 'expandtab' on, all
+ tabs will be replaced 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: In a C program a <Tab> inside a
+ string will also be affected. Use "\t" to avoid this
+ (that's a good habit anyway). {not in Vi}
+
+
+11.4 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}
+
+:[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}
+
+ *:le* *:left*
+:[range]le[ft] [indent] left align lines in [range]. Sets the indent in the
+ lines to [indent] (default 0). {not in Vi}
+
+gq{motion} *Q* *gq*
+Q{motion} Format the lines that were moved over. The length of
+ each line will be restricted to the width given with
+ the 'textwidth' option. See below. If the
+ 'textwidth' option is 0, the width of the screen is
+ used (with a maximum of 79). {not in Vi}
+ NOTE: The "Q" command is used in Vi to go to Ex mode.
+ In a future version of Vim this will be made
+ compatible. Use "gq" for formatting now, to avoid
+ problems when upgrading to a newer version of Vim.
+
+{Visual}gq *v_Q* *v_gq*
+{Visual}Q Format the highlighted text. (see the chapter on
+ Visual mode |Visual_mode|). {not in Vi}
+
+Example: To format the current paragraph use "gqp".
+
+After the "gq" command the cursor is left in the line where the motion command
+would take the cursor. This allows for the formatting to be repeated with
+".". This works fine with "gqj" (format current and next line) and "gq}"
+(format until end of paragraph). Note: When 'formatprg' is set, the cursor is
+left on the first formatted line (like when using a filter command).
+
+If the 'autoindent' option is on, the indent of the first line is used for
+the following lines.
+
+Empty lines are left unchanged (but lines with spaces or tabs are!).
+
+The 'formatprg' option can be set to the name of an external program, which
+will be used instead of the internal function. The 'textwidth' and other
+options will not be used then.
+
+ *format_comments*
+Comments can be formatted in a special way. A comment is recognized by a
+specific string at the start of the line (ignoring white space). Three types
+of comments can be used:
+
+- Repeating the comment string at the start of each line. An example is the
+ type of comment used in shell scripts, starting with "#".
+- Only the first line has the comment string, following lines don't. 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 can be set to a comma separated list of parts. Each
+part defines a type of comment that is recognized. 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 accepted as comment.
+
+ b Blank (<Space>, <Tab> or end-of-line) required after {string}.
+
+ f First line has comment only, will not be repeated on next line, but
+ indent is kept (for bullet-lists).
+ 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'.
+
+When neither 'f', 's', 'm' or 'e' is given, a repeated comment string is
+assumed. It is possible to have an empty flags field.
+
+Blank space in the text before and after the {string} is also included. The
+{string} in the 'comments' option should not include leading or trailing
+blanks (although it is allowed, in which case they are required).
+
+When one comment leader is part of another, put it after that one. 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:*,el:*/" for
+C-comments. To avoid recognizing "*ptr" the 'b' flag is included for the
+middle. For three-piece comments the text after the start and middle is
+checked for the appearance of the end. If it is, the comment will not
+continue below. The middle part must be present, because otherwise Vim can't
+recognize the middle lines.
+
+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. In C code this is good, because somewhere after this
+a "#endif" is needed.
+
+ *fo_table*
+The 'formatoptions' option can be set to influence the way how comments are
+formatted. It is a string option, that may contain any of these letters. The
+default is "tcq". Commas can be added for readability.
+
+letter meaning when present in 'formatoptions'
+
+t Do text autowrapping using textwidth
+c Do comment autowrapping using textwidth, inserting the current
+ comment leader automatically.
+r Automatically insert the current comment leader after hitting
+ <return> 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" (or "Q", which is obsolete).
+ Note that blank lines, or lines containing only the comment leader
+ will be left untouched. A new paragraph starts after such a line, or
+ when the comment leader changes.
+2 When formatting text the indent of the second line of a paragraph is
+ used for the rest of the paragraph. This allows for paragraphs with
+ a different indent for the first line.
+v Vi-compatible auto wrapping in insert mode: Only break a line at a
+ blank that has been 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 a blank has been entered at or before
+ the wrap margin. If the line was longer than 'textwidth' when the
+ insert started, or no blank was entered in the current insert before
+ reaching 'textwidth', there is no auto wrapping.
+l Long lines are not broken in insert mode: When a line was longer than
+ 'textwidth' when the insert command started it is not automatically
+ formatted.
+
+With 't' and 'c' you can decide when auto-wrapping is done:
+value action
+"" no automatic formatting, "gq" can be used for manual formatting
+"t" automatic formatting of text, not for comments
+"c" automatic formatting for comments, not for text (good for C code)
+"tc" automatic formatting for text and comments
+
+Note that when 'textwidth' is 0, no formatting is done anyway (but the comment
+leader is inserted).
+Note that when 'paste' is on, no formatting is done at all.
+Note that 'textwidth' can be non-zero even though auto-wrapping never occurs.
+This is good because it can be used for formatting only in this case (with
+"gq").
+
+If "/*", "*" and/or "*/" are in the 'comments' variable, 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 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: fo="croq" (only format comments)
+ for Mail/news: fo="tcrq" (format all, don't start comment with "o"
+ command)
+
+
+11.5 Indenting C programs *C_indenting*
+
+C programs can be automatically indented. Only the indent is set, no other
+formatting is done. To format comments see |format_comments|.
+
+There are in fact three methods that can be used.
+'autoindent' Just takes 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 clever than the other two and can be configured to
+ different indenting styles.
+The rest of this section is about the 'cindent' option.
+
+Note that the indenting done with 'cindent' does not work for 100%. Vim is
+not a C compiler, not all syntax is recognized.
+
+Four options are used for C program indenting:
+'cindent' When on automatic C program indenting is enabled.
+'cinkeys' Keys that trigger reindenting in insert mode.
+'cinoptions' For setting 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
+this algorithm rather than calling an external program.
+
+See |autocommand| for how to automatically set the 'cindent' option for C code
+files and reset it for others.
+
+ *'cinkeys'* *'cink'*
+The 'cinkeys' option can be set to a string that says when to do indenting.
+The default is "0{,0},:,0#,!^F,o,O,e". This means that indenting is done
+when:
+ "0{" typing '{' as the first character in a line
+ "0}" typing '}' as the first character in a line
+ ":" typing ':' anywhere
+ "0#" typing '#' as the first character in a line
+ "!^F" typing CTRL-F, which is not inserted
+ "o" typing a <CR> anywhere and for the "o" command (not in insert
+ mode!)
+ "O" for the "O" command (not in insert mode!)
+ "e" typing the second 'e' for an "else" at the start of a line
+
+Characters that can be prepended:
+'!' When the key is preceded with a '!' the key will not be inserted but
+ will just cause the current line to be reindented. This allows you to
+ set a command key for reindenting the current line. By default CTRL-F
+ is used for this. Careful with CTRL-I, you might think that it is a
+ nice command for Indenting, but it is the same as a <Tab>.
+'*' When the key is preceded with a '*' the reindenting will be done
+ before inserting the key. If you use "*<Return>" this means that the
+ current line will be reindented, before opening a new line.
+
+When the key is not preceded with a '!' or '*' the reindenting will be done
+after inserting the key. So ';' will set the indentation of the line
+including the ';'.
+
+'0' When a zero is used before the key (but after '!' or '*') it will only
+ trigger reindenting if the key is the first character typed in the
+ line.
+
+Special key names:
+<> Angle brackets mean spelled-out names of keys. For example: "<Up>",
+ "<Ins>".
+'^' Letters preceded by a caret (^) are control characters. For example:
+ "^F" is CTRL-F.
+'o' Means to reindent a line for the "o" command and whenever a new
+ line is opened below the current one. This includes hitting <Return>
+ in insert mode.
+'O' Means to reindent a line for the "O" command.
+'e' Means to reindent a line that starts with "else" when an 'e' is
+ inserted.
+
+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 Return but only if you press Tab, I suggest:
+ :set cinkeys=0{,0},:,0#,!<Tab>,!^F
+
+Note: When the indent of the current line was changed manually, cindenting
+won't be done for any key. This is to avoid re-indenting after you changed
+the indent by typing <BS>, <Tab> or <Space> in the indent, or used CTRL-T or
+CTRL-D.
+
+How the indenting is done can be set with 'cinoptions'. In the list below,
+"N" represents a number of your choice. It can be negative. When there is an
+'s' after the number, it is multiplied with 'shiftwidth'. "1s" is
+'shiftwidth', "2s" is two times 'shiftwidth', etc. A decimal point is allowed
+too: "-0.5s" is minus half a 'shiftwidth'. The examples given 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 The First opening brace of a function or other block is placed
+ in column N. 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 Opening braces are placed N characters from the prevailing
+ indent. 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 Closing braces are placed 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 is used to have 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 Case labels are placed 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 Statements after a case label are placed 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;
+
+ 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 Type for a function declaration will be indented N characters
+ from the margin. (default 'shiftwidth').
+
+ cino= cino=t0 cino=t7
+ int int int
+ func() func() func()
+
+ +N Continuation lines (lines that spill onto two) are indented N
+ additional characters. (default 'shiftwidth').
+
+ cino= cino=+10
+ a = b + 9 * a = b + 9 *
+ c; c;
+
+ cN Comment lines after the comment opener, when there is no other
+ text to line up with, are indented N characters from the comment
+ opener. (default 3). See also |format_comments|.
+
+ cino= cino=c5
+ /* /*
+ text. text.
+ */ */
+
+ (N When in unclosed parentheses, indent N characters from the line
+ with the unclosed parentheses. When N is 0 or the line starts
+ with '(' line up with the unclosed parentheses. (default
+ 'shiftwidth' * 2).
+
+ cino= cino=(0
+ if (c1 && (c2 || if (c1 && (c2 ||
+ c3)) c3))
+ foo;
+ if (c1 && if (c1 &&
+ (c2 || c3) (c2 || c3)
+ } }
+
+ )N Unclosed parentheses will be searched for at most N lines away.
+ This is just to limit the time needed to search for parentheses.
+ (default 20 lines).
+
+ *N Unclosed comments will be searched for at most N lines away.
+ This is just to limit the time needed to search for the start of
+ a comment. (default 30 lines).
+
+The defaults, spelled out in full, would be
+ cinoptions=>s,e0,n0,f0,{0,}0,^0,:s,=s,ps,ts,+s,(2s,)20,*30
+
+Lines are put 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.
+
+
+12. 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*
+["x]y{motion} Yank {motion} text [into register x].
+
+ *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 highlighed text [into register x] (see the
+ chapter on Visual mode |Visual_mode|). {not in Vi}
+
+ *v_Y*
+{Visual}["x]Y Yank the highlighted lines [into register x] (see the
+ chapter on Visual mode |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*
+["x]p Put the text [from register x] after the cursor
+ [count] times. {Vi: no count}
+
+["x]P or *P* *<MiddleMouse>*
+["x]<MiddleMouse> Put the text [from register x] before the cursor
+ [count] times. Using the mouse only works when
+ 'mouse' contains 'n' or 'a'. {Vi: no count}
+
+ *:pu* *:put*
+:[line]pu[t] [x] Put the text [from register x] after [line] (default
+ current line).
+
+:[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}
+
+These commands can be used to copy text from one place to another. This is
+done by first getting the text into a register with a yank, delete or change
+command. The register can then be inserted with a put command. All registers
+are kept when changing files. Thus you can also use this to move text from
+one file to another (the CTRL-^ command is a quick way to toggle between two
+files).
+
+The put commands can be repeated with "." (except for :put) and undone. If
+the command that was used to get the text into the register was linewise, the
+text will be inserted below ("p") or above ("P") the line where the cursor
+is. Otherwise the text will be inserted after ("p") or before ("P") the
+cursor. With the ":put" command the text will always be inserted 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). The "']" or "`]" command can be used
+after the put command to move the cursor to the end of the inserted text,
+"'[" or "`[" to move the cursor to the start.
+
+If the command that was used to get the text into the register used
+blockwise Visual mode, the block of text will be inserted before ("P") or
+after ("p") the cursor column, in the current and next lines. Vim will make
+the whole block of text start in the same column. Thus the inserted text
+looks the same as when it was yanked or deleted. Some <Tab> characters may
+be replaced 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.
+
+There are five types of registers: *registers*
+- The unnamed register "" *quote_quote* *quotequote*
+- 10 numbered registers "0 to "9 *quote_number* *quote0*
+- The small delete register "- *quote_-* *quote-*
+- 26 named registers "a to "z or "A to "Z *quote_alpha* *quotea*
+- three read-only registers ":, ". and "%
+
+ The unnamed register is the register where all text deleted with
+the "d", "c", "s", "x" commands or copied with the yank "y" command is
+placed, regardless of whether or not a specific register was used (e.g.
+"xdd). The contents of this register are used by any put command (p or P)
+which does not specify a register. Additionally it can be accessed by the
+name '"'. This means you have to type two double quotes. {Vi: register
+contents lost when changing files, no '"'}
+ The numbered registers are filled with yank and delete commands.
+Numbered register 0 is filled with the last yank command, unless another
+register was specified with ["x]. Numbered register 1 is filled with the text
+that was deleted by each delete or change command, unless another register was
+specified or the text is less than one line (text deleted with "x" or "dw"
+will be put in the small delete register). The contents of register 1 are put
+in 2, 2 in 3, and so forth. The contents of register 9 are lost. {Vi:
+numbered register contents are lost when changing files; register 0 does not
+exist}
+ The small delete register is filled with delete commands that delete
+less than one line, except when a register was specified with ["x].
+ The named registers are only filled when you say so. They are named
+'a' to 'z' normally. If you use an uppercase letter, the same registers as
+with the lower case letter is used, but the text is appended to the previous
+register contents. With a lower case letter the previous contents are lost.
+ The read-only registers are '%', ':' and '.'. They can only be used
+with the commands "p", "P", ":put" and with CTRL-R.
+ *quote_.* *quote.*
+ ". 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 last command line. It can be used with "@:",
+ this repeats the last command line.
+
+If you use a put command without specifying a register, the register that
+was last written to is used (this is also the contents of the unnamed
+register). If you are confused, use the ":dis" command to find out what will
+be put (all named and numbered registers are displayed; 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* *:move*
+ Move the lines given by [range] to below the line
+ given by {address}.
+
+
+13. 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. {Vi has no Visual
+mode, the name "visual" is used for Normal mode, to distinguish it from Ex
+mode}
+
+ *v*
+v start Visual mode per character. {not in Vi}
+
+ *V*
+V start Visual mode linewise. {not in Vi}
+
+ *CTRL-V*
+CTRL-V start Visual mode blockwise. {not in Vi}
+
+ *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. {not in Vi}
+
+ *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. {not in Vi}
+
+ *<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. {not in Vi}
+
+ *<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'. {not in Vi}
+
+ *<LeftRelease>*
+<LeftRelease> This works like a <LeftMouse>, if it is not a
+ the same position as <LeftMouse>. In an xterm you
+ won't see the selected area until the button is
+ released. Only when 'mouse' option contains 'n' or
+ 'a'. {not in Vi}
+
+
+To apply an operator on a piece of text:
+ 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. hit an operator
+ 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 highlighted text includes the character under the cursor. On terminals
+where it is possible to make the cursor invisible the cursor position is
+also highlighted. On terminals where this is not possible the cursor is
+displayed normally. If your cursor cannot be made invisible and you want Vim
+to highlight the character under the cursor anyway, you could set the 't_cv'
+and 't_ci' options to something harmless, for example:
+ :set t_cv=^[^[ t_ci=^[^[
+
+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
+"~", 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.
+
+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.
+
+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
+
+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-^, "ZZ", CTRL-], CTRL-T, CTRL-R, CTRL-I
+and CTRL-O cause a beep and Visual mode continues.
+
+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|.
+
+The operators that can be used are:
+ ~ switch case |v_tilde|
+ d delete |v_d|
+ c change |v_c|
+ y yank |v_y|
+ > shift right (1)(*) |v_>|
+ < shift left (1)(*) |v_<|
+ ! filter through external command (1) |v_!|
+ = filter through 'equalprg' option command (1) |v_=|
+ Q format lines to 'textwidth' length (1)(obsolete)|v_Q|
+ gq format lines to 'textwidth' length (1) |v_gq|
+
+The objects that can be used are:
+ a word |v_a|
+ A WORD (see |WORD|) |v_A|
+ s sentence |v_s|
+ p paragraph |v_p|
+ P block |v_P|
+
+Additionally the following commands can be used:
+ : start ex command for highlighted lines (1) |v_:|
+ r change |v_r|
+ C change (2) |v_C|
+ R change (2) |v_R|
+ x delete |v_x|
+ D delete (2) |v_D|
+ X delete (2) |v_X|
+ Y yank (2) |v_Y|
+ J join (1) |v_J|
+ U make uppercase |v_U|
+ u make lowercase |v_u|
+ ^] find tag |v_CTRL-]|
+
+(1): always whole lines, see |:visual_example|
+(2): whole lines when not using CTRL-V
+(*): in a future a blockwise shift will move the block only, not whole
+ lines.
+
+Note that the ":vmap" command can be used to specifically map keys in Visual
+mode.
+
+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).
+
+ *repeat_Visual*
+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.
+
+ *: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
+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 again
+
+
+14. Various commands *various*
+====================
+
+ *CTRL-L*
+CTRL-L Clear and redraw the screen.
+
+ *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}
+
+ *:p* *:print*
+:[range]p[rint] Print [range] lines (default current line).
+
+:[range]p[rint] {count}
+ Print {count} lines, starting with [range] (default
+ current line |cmdline_ranges|).
+
+ *: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.
+
+ *:=*
+:= Print the cursor 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. If
+ {commands} does not finish a command, more characters
+ need to be typed. Mostly useful for autocommands.
+ This command cannot be followed by another command,
+ since any '|' is considered part of the command.
+ {not in vi}
+
+ *:sh* *:shell*
+:sh[ell] Escape to a shell (name from 'shell' option).
+
+ *:!cmd* *:!*
+:!{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 ! \!". 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 options were defined when Vim was compiled.
+
+:ve[rsion] {nr} Set the version number to {nr}. Used in .vimrc files.
+ When omitted Vim will give a warning message. If {nr}
+ is higher than the current Vim version this will
+ result in an error message. {not in Vi}
+
+ *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.
+ If 'keywordprg' is empty, the ":help" command is used.
+ {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] Do nothing for [N] 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}
+
+
+15. Repeating commands *repeating*
+======================
+
+15.1 Single repeats *single_repeat*
+
+ *.*
+. Repeat last change with count replaced with [count].
+
+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 the section on undo and redo for
+an example how to use this |undo_redo|. Note that when repeating a command
+that used a Visual selection, the same SIZE of area is used, see
+|repeat_Visual|.
+
+ *@:*
+@: Repeat last command line [count] times.
+
+
+15.2 Multiple repeats *multi_repeat*
+
+ *:g* *:global*
+:[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. In a second scan the [cmd] is
+executed for each marked line with its line number prepended. If a line is
+changed or 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 global command aborts.
+
+To repeat a non-Ex command, you will have to put the command in a file and
+use "source!". For example:
+ :g/pat/so! scriptfile
+Make sure that the scriptfile 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.
+
+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 occurences of "pat" with "PAT". The same can be done with:
+ :%s/pat/PAT/g
+Which is two characters shorter!
+
+
+15.3 Complex repeats *complex_repeat*
+
+ *q*
+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. {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) cannot be used. See also |@:|. {Vi: only named
+ registers}
+
+ *@@*
+@@ Repeat the previous @<0-9a-z":> [count] times.
+
+ *:@*
+:[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'. {Vi: only in
+ some versions} Future: Will execute the register for
+ each line in the address range.
+
+:[addr]@: Repeat last command line [count] times. First set
+ cursor at line [addr] (default is current line).
+ {Vi: only in some versions}
+
+ *:@@*
+:[addr]@@ Repeat the previous :@<0-9a-z">. First set cursor at
+ line [addr] (default is current line). {Vi: only in
+ some versions}
+
+ *:so* *:source*
+:so[urce] {file} Read Ex commands from {file}.
+
+:so[urce]! {file} Read Vim commands from {file}. {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, 'put' 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 are asked to "hit return to
+continue". If you ':source' a file with the line "!ls" in it, you will have
+to type the return 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.
+
+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*
+MS-DOS, Win32 and OS/2: Files that are read with ":source" normally have
+<CR>-<NL> line separators. These always work. If you are using a file with
+<NL> line separators (for example, a file made on Unix), this will be
+recognized if you have 'textauto' on 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.
+
+
+16. Undo and redo *undo_redo*
+=================
+
+<Undo> or *undo* *<Undo>* *u*
+u Undo [count] changes. {Vi: only one level}
+
+ *:u* *: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*
+: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 go back in time with the "u"
+command. You can then go forward again with the 'CTRL-R' command. If you
+make a new change after the "u" command, the 'CTRL-R' will not be possible
+anymore. The number of changes that are remembered is set with the
+'undolevels' option. If it is zero, the old fashioned Vi undo is present:
+one level of undo and undo undoes itself. If it is negative no undo is
+possible. Use this if you are running out of memory.
+
+The "U" command is treated by undo/redo just like any other command. Thus a
+"u" command undos 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.
+
+When all changes have been undone the buffer is not considered to be changed.
+Vim can then be exit with ":q" instead of ":q!". {this is not in Vi}
+
+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'.
+
+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.
+
+
+17. Key mapping *key_mapping*
+===============
+
+There are commands to enter new mappings, remove mappings and list mappings:
+
+:map {lhs} {rhs} *:map*
+:nm[ap] {lhs} {rhs} *:nm* *:nmap*
+:vm[ap] {lhs} {rhs} *:vm* *:vmap*
+:map! {lhs} {rhs} *:map!*
+:im[ap] {lhs} {rhs} *:im* *:imap*
+:cm[ap] {lhs} {rhs} *:cm* *:cmap*
+ Map the key sequence {lhs} to {rhs} for the modes
+ where the map command applies.
+
+
+:no[remap] {lhs} {rhs} *:no* *:noremap*
+:nn[oremap] {lhs} {rhs} *:nn* *:nnoremap*
+:vn[oremap] {lhs} {rhs} *:vn* *:vnoremap*
+:no[remap]! {lhs} {rhs} *:no!* *:noremap!*
+:ino[remap] {lhs} {rhs} *:ino* *:inoremap*
+: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}. {not in Vi}
+
+
+:unm[ap] {lhs} *:unm* *:unmap*
+:nun[map] {lhs} *:nun* *:nunmap*
+:vu[nmap] {lhs} *:vu* *:vunmap*
+:unm[ap]! {lhs} *:unm!* *:unmap!*
+:iu[nmap] {lhs} *:iu* *:iunmap*
+:cu[nmap] {lhs} *:cu* *:cunmap*
+ Remove the mapping of {lhs} for the modes where the
+ map command applies.
+
+:mapc[lear] *:mapc* *:mapclear*
+:nmapc[lear] *:nmapc* *:nmapclear*
+:vmapc[lear] *:vmapc* *:vmapclear*
+:mapc[lear]! *:mapc!* *:mapclear!*
+:imapc[lear] *:imapc* *:imapclear*
+:cmapc[lear] *:cmapc* *:cmapclear*
+ Remove all mappings for the modes where the map
+ command applies. {not in Vi}
+
+:map
+:nm[ap]
+:vm[ap]
+:map!
+:im[ap]
+:cm[ap]
+ List all key mappings for the modes where the map
+ command applies.
+
+:map {lhs} *:map_l*
+:nm[ap] {lhs} *:nmap_l*
+:vm[ap] {lhs} *:vmap_l*
+:map! {lhs} *:map_l!*
+:im[ap] {lhs} *:imap_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 the "Options" chapter below for how
+to save and restore the current mapping |options|.
+
+There are four sets of mappings
+- For Insert mode. These are also used in Replace mode.
+- For Command-line mode: When entering a ":" or "/" command.
+- For Normal mode: When typing commands.
+- For Visual mode: When typing commands while the Visual area is highlighted.
+
+Overview of which map command works in which mode:
+
+ commands: modes:
+ Normal Visual Insert Command-line
+:map :noremap :unmap :mapclear X X . .
+:nmap :nnoremap :nunmap :nmapclear X . . .
+:vmap :vnoremap :vunmap :vmapclear . X . .
+:map! :noremap! :unmap! :mapclear! . . X X
+:imap :inoremap :iunmap :imapclear . . X .
+:cmap :cnoremap :cunmap :cmapclear . . . X
+
+The original Vi did not have separate mappings for Normal/Visual mode and
+Insert/Command-line mode. Therefore the ":map" and ":map!" commands enter
+and display mappings for both. In Vim you can use the ":nmap", "vmap",
+":cmap" and ":imap" commands to enter mappings for each mode separately.
+When listing mappings the character in column 1 is
+
+ char mode
+ <Space> Normal and Visual
+ n Normal
+ v Visual
+ ! Insert and Command-line
+ i Insert
+ c Command-line
+
+Note: When using mappings for Visual mode, you can use the '<' mark, which
+is the start of the last selected Visual area |'<|.
+
+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.
+
+ *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 |<>|.
+
+ *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, 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).
+
+ *map_bar*
+It is not possible to put a comment after this command, because the '"'
+character is considered to be part of the {rhs}. To put a '|' in {rhs}
+escape it with a backslash or a CTRL-V (to get one CTRL-V you have to type
+it twice). When 'b' is present in 'cpoptions', only CTRL-V can be used, "\|"
+will be recognized as a mapping ending in a '\' and then another command. This
+is vi compatible, but unlogical. Summary:
+ :map _l :!ls \| more^M works in Vim when 'b' is not in 'cpo'
+ :map _l :!ls ^V| more^M works always, in Vim and vi
+
+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 enountered (that causes an error message) 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.
+
+Some examples (given as you type them; e.g., the "^V" is CTRL-V which you
+type, but will not show up on the screen):
+
+ :map g /foo^V^Mcwbar^V^[ (replace next "foo" with "bar")
+ :map! qq quadrillion questions
+
+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
+type slowly, or your system is slow, reset the 'timeout' option. Then you
+might want to set the 'ttimeout' option. See the "Options" chapter |options|.
+
+ *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}, that part is not mapped again.
+For example:
+ :map a ab
+will execute the "a" command and insert a 'b' in the text. The 'a' 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".
+
+See the file "index" for keys that are not used and thus can be mapped
+without losing any builtin function. I suggest you use function keys,
+and meta-keys. If you are prepared to lose a command that you hardly ever use
+you can make mappings that start with '_' or '-'. 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).
+
+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).
+
+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 section 20.2
+|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.
+
+
+18. 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
+
+18.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 MS-DOS and Win32 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.
+
+ If the ".swp" filename already exists, the last character is
+ decremented until there is no file with that name or ".swa" 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!
+
+When starting to edit a file, Vim checks if a swap file already exists for
+that file. If there is one, you will get a message indicating that something
+is wrong:
+
+ ATTENTION
+ Found a swap file by the name "../doc/vim_ref.txt.swp"
+ dated: Thu May 16 11:46:31 1996
+ file name: ~mool/vim/vim/doc/vim_ref.txt
+ host name: Kibaale
+ user name: mool
+ process ID: 211 (still running)
+ While opening file "../doc/vim_ref.txt"
+ dated: Wed May 15 21:38:40 1996
+
+You are to take one of two actions:
+
+1. Quit editing this file, because another edit session is active on this
+ 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. The text "(still running)" indicates that the process
+ editing this file runs on the same computer (Unix only). When working over
+ a network you will not see this message, because the process will be
+ running on another computer.
+2. Recover a previously crashed edit session. See below |recovery|.
+
+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.
+
+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 loosing 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*
+: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".
+
+
+18.2 Recovery *recovery*
+
+In most cases recovery is quite easy: Start Vim on the same file you were
+editing when the crash happened, with the "-r" option added. Vim will read
+the ".swp" file and may read bits and pieces of the original file.
+
+Example: vim -r vim_ref.txt
+
+If you were editing without a file name, give an empty string as argument:
+ vim -r ""
+
+If there are several swap files that look 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. 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.
+
+If you know which swap file needs to be used, you can recover by giving the
+swap file name. Vim will then find out the name of the original file from
+the swap file.
+
+Example: Vim -r vim_ref.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.
+
+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*
+: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.
+
+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.
+
+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}
+
+
+19. Options *options*
+===========
+
+Vi has a number of internal variables and switches which can be set to
+achieve special effects. These options come in three forms:
+ toggle can only be on or off *toggle*
+ number has a numeric value
+ string has a string value
+
+19.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.
+
+: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}
+
+:se[t] {option}& Reset option to its default value. {not in Vi}
+
+: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 <Tab> (or whatever the value of
+ 'wildchar' is). See 4.4.2 |cmdline_completion|.
+ See |option_backslash| for using backslashes in
+ {value}.
+
+ *: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 allright, 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:
+ :set t_kb=^V<BS>
+ :fixdel
+ Where "^V" is CTRL-V and "<BS>" is the backspace
+ key. This will only work for terminals with the same
+ code for the backspace key, you cannot use this in
+ your .vimrc unless the code for backspace is the same
+ on all your systems.
+
+ If your <Delete> key sends a strange key sequence (not
+ CTRL-? or CTRL-H) you cannot use ":fixdel". Then use:
+ :set t_kD=^V<Delete>
+ Where "^V" is CTRL-V and "<Delete>" is the delete key.
+ This will only work on systems with the same terminal
+ codes for delete.
+
+ 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
+
+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 text up to the next space will be skipped. Thus following arguments
+will be processed.
+
+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
+
+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--" message. See the 'more' option.
+
+ *:set_env*
+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,.
+
+Using "~" is like using "$HOME", but it is only recognized at the start of an
+option and after a space or comma.
+
+ *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"
+
+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.
+
+
+19.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.
+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 the section "Automatic commands" |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*
+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 white space (<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]set {options}:[text]
+
+[text] any text or empty
+{white} at least one white space (<Space> or <Tab>)
+{vi:|vim:|ex:} the string "vi:", "vim:" or "ex:"
+[white] optional white space
+set the string "set " (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:").
+
+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 '\'. No other
+commands than "set" are supported, for security reasons (somebody might create
+a trojan horse text file with modelines).
+
+
+19.3 Saving settings *save_settings*
+
+ *: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 as :mkexrc, but 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', 'lines',
+'modified', 'scroll', 'term' and 'ttyfast' are not included, because these are
+terminal or file dependent. Note that the options 'binary', 'textmode',
+'paste' and 'readonly' are included, this might not always be what you want.
+
+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|.
+
+
+19.4 Options summary *option_summary*
+
+In the list below all the options are mentioned with their full name and some
+with an abbreviation between parens. Both forms may be used. In this
+document when an option that can be toggled is "set" that means that ":set
+option" is entered. When an option is "reset", ":set nooption" is used.
+
+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 'textwith' 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' in 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.
+
+A jump table for the options with a short description can be found at |X_op|.
+
+ *'aleph'* *'al'*
+aleph (al) number (default 128 for MS-DOS, 224 otherwise)
+ global
+ {not in Vi}
+ {This option applies only if Vim was compiled with
+ RIGHTLEFT defined}
+ 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 |vim_rlh.txt|.
+
+ *'autoindent'* *'ai'* *'noautoindent'* *'noai'*
+autoindent (ai) toggle (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> 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 specific
+ cases. 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}.
+
+ *'autowrite'* *'aw'* *'noautowrite'* *'noaw'*
+autowrite (aw) toggle (default off)
+ global
+ Write the contents of the file, if it has been modified, on each
+ :next, :rewind, :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.
+
+ *'backspace'* *'bs'*
+backspace (bs) number (default 0)
+ global
+ {not in Vi}
+ Influences the working of <BS>, <Del>, CTRL-W and CTRL-U in Insert
+ mode. If set to 0 Vi compatible backspacing is used. When 1 allow
+ backspacing over newlines. When larger than 1 allow backspacing over
+ the start of insert. In the last case CTRL-W and CTRL-U stop once at
+ the start of insert. See |:fixdel| if your <BS> or <Del> key does not
+ do what you want.
+
+ *'backup'* *'bk'* *'nobackup'* *'nobk'*
+backup (bk) toggle (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 table
+ in section 5.4 for more explanations |backup_table|.
+
+ *'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!).
+ - A directory '.' means to put the backup file in the same directory
+ as the edited file. Characters after the "." are ignored, "./temp"
+ is handled in the same way as ".".
+ - 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.
+
+ *'backupext'* *'bex'*
+backupext (bex) string (default "~")
+ 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
+ accidently 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.
+
+ *'binary'* *'bin'* *'nobinary'* *'nobin'*
+binary (bin) toggle (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
+ 'textmode' will be off
+ 'textauto' will be off
+ 'expandtab' will be off
+ NOTE: When you start editing a(nother) file while the 'bin' option is
+ on, settings from the modelines or 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 fron on to off. Each buffer has its own set of
+ saved option values, except for 'textauto', which is global.
+ When writing a file the end-of-line for the last line is only written
+ if there was one in the original file (normally Vim appends an
+ end-of-line to the last line if there is none; this would make the
+ file longer). See the 'endofline' option.
+
+ *'bioskey'* *'biosk'* *'nobioskey'* *'nobiosk'*
+bioskey (biosk) toggle (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.
+
+ *'breakat'* *'brk'*
+breakat (brk) string (default " ^I!@*-+_;:,./?")
+ global
+ {not in Vi}
+ This option lets you choose which characters might cause a line
+ break if 'linebreak' is on.
+
+ *'cindent'* *'cin'* *'nocindent'* *'nocin'*
+cindent (cin) toggle (default off)
+ local to buffer
+ {not in Vi}
+ {Only present when compiled with CINDENT enabled,
+ ":version" says "+cindent" instead of "-cindent"}
+ 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 'lisp' is not on and 'equalprg' is empty,
+ the "=" operator indents using this algorithm rather than calling an
+ external program. See |C_indenting|. This option is switched off
+ when 'paste' is set. When you don't like the way 'cindent' works, try
+ the 'smartindent' option.
+
+cinkeys (cink) string (default "0{,0},:,0#,!^F,o,O,e")
+ local to buffer
+ {not in Vi}
+ {Only present when compiled with CINDENT enabled}
+ A list of keys that, when typed in insert mode, cause reindenting of
+ the current line. Only happens if 'cindent' is on. See
+ |C_indenting|.
+
+ *'cinoptions'* *'cino'*
+cinoptions (cino) string (default "")
+ local to buffer
+ {not in Vi}
+ {Only present when compiled with CINDENT enabled}
+ The 'cinoptions' affect the way 'cindent' reindents lines in a C
+ program. See |C_indenting|.
+
+ *'cinwords'* *'cinw'*
+cinwords (cinw) string (default "if,else,while,do,for,switch")
+ local to buffer
+ {not in Vi}
+ {Only present when compiled with CINDENT or
+ SMARTINDENT enabled}
+ 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 {}).
+
+ *'cmdheight'* *'ch'*
+cmdheight (ch) number (default 1)
+ global
+ {not in Vi}
+ Number of lines to use for the command line. If you are annoyed by
+ "Hit return ..." caused by long messages, set this option to a larger
+ value.
+
+ *'columns'* *'co'*
+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.
+
+ *'comments'* *'com'*
+comments (com) string (default
+ "sr:/*,mb:*,el:*/,://,b:#,:%,:XCOMM,n:>,fb:-")
+ local to buffer
+ {not in Vi}
+ A comma separated list of patterns that can start a comment line. See
+ |format_comments|. See |option_backslash| about using backslashes to
+ insert a space.
+
+ *'compatible'* *'cp'* *'nocompatible'* *'nocp'*
+compatible (cp) toggle (default off, on when compiled with COMPATIBLE
+ defined, ":version" shows "+compatible")
+ global
+ {not in Vi}
+ At the moment this option is set, several other options will be set
+ or reset to make Vim Vi-compatible. Switching this option off has no
+ effect. See also 'cpoptions'.
+
+ option new value effect
+
+ backspace 0 normal backspace
+ backup off no backup file
+ cindent off no C code indentation
+ cpoptions "bcefFkmorsStx$!%" vi-compatible flags
+ digraph off no digraphs
+ esckeys off no <Esc>-keys in Insert mode
+ expandtab off tabs not expanded to spaces
+ formatoptions "vt" Vi compatible formatting
+ gdefault off no default 'g' flag for ":s"
+ history 0 no commandline history
+ 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
+ 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
+ startofline on goto startofline with some commands
+ textauto off no automatic textmode detection
+ textwidth 0 no automatic line wrap
+ tildeop off tilde is not an operator
+ ttimeout off no terminal timeout
+ undolevels 0 no multilevel undo
+ updatecount 0 no swap file
+ whichwrap "" left-right movements don't wrap
+ wildchar CTRL-E only when the current value is <Tab>
+ use CTRL-E for cmdline completion
+ writebackup off no backup file written
+
+ *'cpoptions'* *'cpo'*
+cpoptions (cpo) string (default "BceFs", unless compiled with
+ COMPATIBLE defined, then all flags are
+ included)
+ global
+ {not in Vi}
+ Sequence of characters. When a character is present this indicates
+ vi-compatible behaviour. This is used for things where not being
+ vi-compatible is mostly or sometimes preferred. 'cpoptions' stands
+ for 'compatibleoptions'. Commas can be added for readability.
+
+ contains behaviour
+ 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|.
+ 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. This flag must be removed to be able to fully
+ use the <> notation. 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)
+ < 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 below.
+ c Searching continues at the end of any match at the
+ cursor position. 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.
+ 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>.
+ 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.
+ 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.
+ 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 above.
+ 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'|
+ o Line offset to search command is not remembered for
+ next search.
+ r Redo ("." command) uses "/" to repeat a search
+ command, instead of the actually used search string.
+ 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.
+ S Set buffer options always when entering a buffer
+ (except 'readonly' and 'textmode'). 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)
+ no yes each time when buffer entered (vi comp.)
+ yes yes when buffer created or first entered
+
+ 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.
+ 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>|
+ $ 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.
+ ! When redoing a filter command, use the last used
+ external command, whatever it was. Otherwise the last
+ used -filter- command is used.
+ % Vi-compatible matching is done for the "%" command.
+ 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,
+ everyting 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.
+
+ *'define'* *'def'*
+define (def) string (default "^#[ \t]*define")
+ global
+ {not in Vi}
+ Pattern to be used to find a macro definition. It is a search
+ pattern, just like for the "/" command. The default value is for C
+ programs. This option is used for the commands like "[i" and "[d"
+ |include_search|. The 'isident' option is used to recognize the
+ identifier name after the match. See |option_backslash| about
+ inserting backslashes to include a space or backslash.
+
+ *'dictionary'* *'dict'*
+dictionary (dict) string (default "")
+ global
+ {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, one word per line. 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.
+
+ *'digraph'* *'dg'* *'nodigraph'* *'nodg'*
+digraph (dg) toggle (default off)
+ global
+ {not in Vi}
+ {Only applies when compiled with DIGRAPHS defined,
+ check with ":version"}
+ Enable the entering of digraphs in Insert mode with {char1} <BS>
+ {char2}. See |digraphs|.
+
+ *'directory'* *'dir'*
+directory (dir) string (default for Amiga: ".,t:",
+ for MS-DOS and Win32: ".,c:\tmp,c:\temp"
+ for Unix: ".,~/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. Everything after the "." is ignored, "./temp" is
+ handled in the same way as ".".
+ - 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. That is
+ why a "tmp" directory in your home directory is used first.
+ {Vi: directory to put temp file in, defaults to "/tmp"}
+
+ *'ed'* *'edcompatible'* *'noed'* *'noedcompatible'*
+edcompatible (ed) toggle (default off)
+ global
+ Makes the 'g' and 'c' flags of the ":substitute" command to be
+ toggled each time the flag is given. See 11.3 |complex_change|. See
+ also 'gdefault' option.
+
+ *'endofline'* *'eol'* *'noendofline'* *'noeol'*
+endofline (eol) toggle (default on)
+ local to buffer
+ {not in Vi}
+ When writing a file and this option is off and the 'binary' option
+ is on, no end of line (newline) character 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 end of
+ line (newline) 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 newline 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
+ when you want to.
+
+ *'equalalways'* *'ea'* *'noequalalways'* *'noea'*
+equalalways (ea) toggle (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 the the window
+ above it.
+
+ *'equalprg'* *'ep'*
+equalprg (ep) string (default "")
+ global
+ {not in Vi}
+ External program to use for "=" command. When this option is empty
+ the internal formatting functions are used ('lisp' or 'cindent').
+ Environment variables are expanded |:set_env|. See |option_backslash|
+ about including spaces and backslashes.
+
+ *'errorbells'* *'eb'* *'noerrorbells'* *'noeb'*
+errorbells (eb) toggle (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 (default "AztecC.Err" or "errors.vim")
+ global
+ {not in Vi}
+ Name of the error file for the QuickFix mode (see 5.5
+ |:make_makeprg|). Environment variables are expanded |:set_env|. See
+ |option_backslash| about including spaces and backslashes.
+
+ *'errorformat'* *'efm'*
+errorformat (efm) string (default is very long)
+ global
+ {not in Vi}
+ Scanf-like description of the format for the lines in the error file
+ (see 5.5 |errorformat|).
+
+ *'esckeys'* *'ek'* *'noesckeys'* *'noek'*
+esckeys (ek) toggle (default on, off when compiled with COMPATIBLE
+ defined)
+ 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'.
+
+ *'expandtab'* *'et'* *'noexpandtab'* *'noet'*
+expandtab (et) toggle (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" command in 11.3 |:retab|
+ and section 4.3.4 |ins_expandtab|.
+
+ *'exrc'* *'noexrc'*
+exrc toggle (default off)
+ global
+ {not in Vi}
+ Enables the reading of .vimrc and .exrc in the current directory. If
+ you switch this option on you should also consider setting the
+ 'secure' option (see 3.4 |initialization|). Using a local .exrc or
+ .vimrc is a potential security leak, use with care!
+
+ *'formatoptions'* *'fo'*
+formatoptions (fo) string (default "tcq", "vt" when compiled with
+ COMPATIBLE defined)
+ 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.
+
+ *'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.
+
+ *'gdefault'* *'gd'* *'nogdefault'* *'nogd'*
+gdefault (gd) toggle (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 11.3 |complex_change|.
+
+ command 'gdefault' on 'gdefault' off
+ :s/// subst. all subst. one
+ :s///g subst. one subst. all
+ :s///gg subst. all subst. one
+
+ *'guifont'* *'gfn'*
+guifont (gfn) string (default "")
+ global
+ {not in Vi}
+ {Only available when compiled with GUI enabled}
+ This is a list of fonts which should be tried when starting the GUI
+ version of vim. The fonts are separated with commas. 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. If
+ none of the fonts can be loaded, 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.
+
+ *'guioptions'* *'go'*
+guioptions (go) string (default "agmr")
+ 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. Valid letters are as follows:
+
+ '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 <"*> GUI 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 selecting "Cut" or "Copy" etc from the "Edit" menu (which
+ have not been implemented yet!).
+
+ 'f' Foreground: Don't use fork() to detatch 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). Altenatively you
+ can use "gvim -f" or ":gui -f" to start the GUI in the
+ foreground. |gui_fork|
+
+ 'm' Menu bar is present when 'm' is included.
+ '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.
+
+ 'r' Right-hand scrollbar is present when 'r' is included.
+ 'l' Left-hand scrollbar is present when 'l' is included.
+ 'b' Bottom (horizontal) scrollbar is present when 'b' is included.
+
+ And yes, you may even have scrollbars on the left AND the right if
+ you really want to :-). See |gui_scrollbars| for more information.
+
+ *'guipty'* *'noguipty'*
+guipty toggle (default off)
+ 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 (Amiga) "vim:vim_help.txt"
+ (MS-DOS, Win32, OS/2) "$VIM/vim_help.txt"
+ (Unix) "/usr/local/lib/vim/vim_help.txt")
+ global
+ {not in Vi}
+ Name of the help file. All help files should be placed together in
+ one directory. Environment variables are expanded |:set_env|. For
+ example: "$VIM/doc/vim_help.txt". If $VIM is not set, $HOME is also
+ tried. For Unix the default is adjusted at compile time to where the
+ help files are being installed. See |option_backslash| about
+ including spaces and backslashes.
+
+ *'helpheight'* *'hh'*
+helpheight (hh) number (default 20)
+ global
+ {not in Vi}
+ 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.
+
+ *'hidden'* *'hid'* *'nohidden'* *'nohid'*
+hidden (hid) toggle (default off)
+ global
+ {not in Vi}
+ When off the current buffer is unloaded when it is abandoned. When
+ on the current buffer becomes hidden when starting to edit another
+ buffer. If the current buffer is also displayed in another window it
+ does not become hidden. The commands that move through the buffer
+ list make the current buffer hidden although the 'hidden' option is
+ off. See also |vim_win.txt|.
+
+ *'highlight'* *'hl'*
+highlight (hl) string (default "8b,db,es,hs,mb,Mn,nu,rs,sr,tb,vr,ws")
+ 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:
+ 8 Meta & special keys listed with ":map"
+ d directories in CTRL-D listing
+ e error messages
+ h help file headers
+ m "--More--" message
+ M Mode (e.g., "-- INSERT --")
+ n line number for ":number" and ":#" commands
+ r return to continue message and yes/no questions
+ s status lines
+ t Titles for output from ":set all", ":autocmd" etc.
+ v Visual mode
+ w warning messages
+ 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
+ The default is used for occasions that are not included.
+
+ *'history'* *'hi'*
+history (hi) number (default 20)
+ 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|).
+
+ *'hkmap'* *'hk'* *'nohkmap'* *'nohk'*
+hkmap (kh) toggle (default off)
+ global
+ {not in Vi}
+ {Only available if Vim was compiled with RIGHTLEFT
+ defined}
+ When on, the keyboard is mapped for the Hebrew character set.
+ Normally you would use CTRL-_ in insert mode to toggle this option.
+ See |vim_rlh.txt|.
+
+ *'icon'* *'noicon'*
+icon toggle (default off, on when title can be restored)
+ global
+ {not in Vi}
+ When on the icon of the window will be set to the name of the file
+ currently being edited. Only the last part of the name is used. Only
+ works if the terminal supports setting window icons (currently only
+ Unix xterm and iris-ansi). When Vim was compiled with HAVE_X11
+ defined, the original icon will be restored if possible |X11|.
+
+ *'ignorecase'* *'ic'* *'noignorecase'* *'noic'*
+ignorecase (ic) toggle (default off)
+ global
+ Ignore case in search patterns. Also used when searching in the tags
+ file.
+
+ *'include'* *'inc'*
+include (inc) string (default "^#[ \t]*include")
+ global
+ {not in Vi}
+ Pattern to be used to find an include command. It is a search
+ pattern, just like for the "/" command (See 6.6, "Pattern
+ searches" |search_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.
+
+ *'incsearch'* *'is'* *'noincsearch'* *'nois'*
+incsearch (is) toggle (default off)
+ global
+ {not in Vi}
+ While typing a search pattern, 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.
+
+ *'infercase'* *'inf'* *'noinfercase'* *'noinf'*
+infercase (inf) toggle (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 lower case. If the typed text
+ has no lower case letters and the match has a lower case letter where
+ the typed text has an upper case letter, and there is a letter before
+ it, the completed part is made uppercase.
+
+ *'insertmode'* *'im'* *'noinsertmode'* *'noim'*
+insertmode (im) toggle (default off)
+ global
+ {not in Vi}
+ Start the edit of a file in Insert mode. Useful if you want to use
+ Vim like a modeless editor (use the cursor keys to move around, use
+ CTRL-O for other commands |i_CTRL-O|).
+
+ *'isfname'* *'isf'*
+isfname (isf) string (default for MS-DOS, Win32 and OS/2:
+ "@,48-57,/,.,-,_,+,,,$,:,\"
+ for AMIGA: "@,48-57,/,.,-,_,+,,,$,:"
+ otherwise: "@,48-57,/,.,-,_,+,,,$,:,~")
+ global
+ {not in Vi}
+ The characters given by this option are included in file names and
+ path names. File names are used for commands like "gf", "[i" and in
+ the tags file. Besides the characters in this option characters that
+ are defined by the C function isalpha() are also always included
+ (this depends on the character set and "locale").
+
+ 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, command 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. See 'isfname' for a description of
+ the format of this option.
+
+ *'iskeyword'* *'isk'*
+iskeyword (isk) string (default for MS-DOS and Win32:
+ "@,48-57,_,128-167,224-235"
+ otherwise: "@,48-57,_,192-255"
+ but when compiled with COMPATIBLE defined:
+ "@,48-57,_")
+ local to buffer
+ {not in Vi}
+ Keywords are used in searching and recognizing with many commands:
+ "*", "[i", etc. 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 '|'. When the 'lisp' option is on the '-' character is always
+ included.
+
+ *'isprint'* *'isp'*
+isprint (isp) string (default for MS-DOS and Win32: "@,~-255"
+ otherwise: "@,161-255")
+ global
+ {not in Vi}
+ The characters given by this option are displayed directly on the
+ screen. 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 "~?"
+
+ *'joinspaces'* *'js'* *'nojoinspaces'* *'nojs'*
+joinspaces (js) toggle (default on)
+ global
+ {not in Vi}
+ Insert two spaces after a period with a join command.
+
+ *'keywordprg'* *'kp'*
+keywordprg (kp) string (default "man")
+ global
+ {not in Vi}
+ Program to use for the "K" command. Environment variables are
+ expanded |:set_env|. When empty ":help" is used. See
+ |option_backslash| about including spaces and backslashes.
+
+ *'langmap'* *'lmap'*
+langmap (lmap) string (default "")
+ global
+ {not in Vi}
+ {Only included when Vim was compiled with HAVE_LANGMAP
+ defined (Check ":version" for "+langmap").
+ This option allows support for keyboards that have a mode for a
+ special language. The idea is that when you are typing text in Insert
+ mode your keyboard is switched in the special language mode, you get
+ different key codes for the special characters. 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.
+
+ 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!
+
+ *'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.
+
+ *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
+linebreak (lbr) toggle (default off)
+ local to window
+ {not in Vi}
+ 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 newline characters
+ 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. Note
+ that <Tab> characters after a line break are mostly not displayed
+ correctly.
+
+ *'lines'*
+lines number (default 24 or terminal height)
+ global
+ Number of lines in the display. Normally you don't need to set this.
+ That is done automatically by the terminal initialization code. When
+ you do set this, and Vim is unable to change the physical number of
+ lines on the display, redisplaying may be wrong.
+
+ *'lisp'* *'nolisp'*
+lisp toggle (default off)
+ local to buffer
+ {Only included when compiled with LISPINDENT enabled,
+ ":version" says "+lispindent" instead of
+ "-lispindent"}
+ Lisp mode: When a return 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 '-'
+ 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 reset when
+ 'paste' is set. {Vi: Does it a little bit differently}
+
+ *'list'* *'nolist'*
+list toggle (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').
+
+ *'magic'* *'nomagic'*
+magic toggle (default on)
+ global
+ Changes the special characters that can be used in search patterns.
+ See section "Pattern searches" |search_pattern|.
+
+ *'makeprg'* *'mp'*
+makeprg (mp) string (default "make")
+ global
+ {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.
+
+ *'maxmapdepth'* *'mmd'*
+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 512)
+ 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. See also 'maxmemtot'.
+
+ *'maxmemtot'* *'mmt'*
+maxmemtot (mmt) number (default 2048, or half the amount of memory
+ available)
+ global
+ {not in Vi}
+ Maximum amount of memory (in Kbyte) to use for all buffers together.
+ See also 'maxmem'.
+
+ *'modeline'* *'ml'* *'nomodeline'* *'noml'*
+modeline (ml) toggle (default on, off when compiled with COMPATIBLE
+ defined)
+ 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 19.1 |modeline|. 'modeline' is reset when
+ 'compatible' is set.
+
+ *'modified'* *'mod'* *'nomodified'* *'nomod'*
+modified (mod) toggle (default off)
+ local to buffer
+ {not in Vi}
+ When on the buffer is considered to be modified. This option is set
+ by every command that makes a change to the buffer. Only the undo
+ command may reset it, when all changes have been undone.
+
+ *'more'* *'nomore'*
+more toggle (default on, off when compiled with COMPATIBLE
+ defined)
+ global
+ {not in Vi}
+ Listings pause when the whole screen is filled. Type:
+ <CR> or <NL> for one more line.
+ <Space> for the next page.
+ 'd' for down half a page.
+ 'q' or CTRL-C to stop the listing.
+ ':' to stop the listing and enter a command line.
+ Any other key causes the meaning of the keys to be displayed.
+ When this option is off there are no pauses, the listing continues
+ until finished. When 'compatible' is set this option is reset.
+ Note: The key typed at the "more" prompt is directly obtained from the
+ terminal, it is not mapped and typeahead is ignored.
+
+ *'mouse'*
+mouse string (default "", "a" for MS-DOS and Win32)
+ global
+ {not in Vi}
+ Enable the use of the mouse. Only works for certain terminals
+ (MS-DOS, Win32 and xterm). 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 return ..." question
+ Normally you would enable the mouse in all four modes with:
+ :set mouse=a
+ Note: Normal copy/paste in an xterm can still be used by pressing the
+ shift key when the mouse is being used by Vim. See |mouse_using|.
+
+ *'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.
+
+ *'number'* *'nu'* *'nonumber'* *'nonu'*
+number (nu) toggle (default off)
+ local to window
+ Print the line number in front of each line. Tip: If you don't like
+ wrapping lines to mix with the line numbers, set the 'showbreak'
+ option to eight spaces:
+ :set showbreak=\ \ \ \ \ \ \ \
+
+ *'paragraphs'* *'para'*
+paragraphs (para) string (default "IPLPPPQPP LIpplpipbp")
+ global
+ Specifies the nroff macros that separate paragraphs. These are pairs
+ of two letters (see section 6.4 |object_motions|).
+
+ *'paste'* *'nopaste'*
+paste toggle (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. When the 'paste' option is switched on (also when
+ it was already on):
+ - mapping in Insert mode is disabled
+ - abbreviations are disabled
+ - 'textwidth' is set to 0
+ - 'autoindent' is reset
+ - 'smartindent' is reset
+ - 'cindent' is reset
+ - 'lisp' is reset
+ - 'revins' is reset
+ - 'ruler' is reset
+ - 'showmatch' is reset
+ - 'formatoptions' is used like it is empty
+ 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. If
+ you use this often, you could map a function key to the command ":set
+ invpaste^V^M".
+
+ *'patchmode'* *'pm'*
+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 edited 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 succesfully 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.
+
+ *'path'* *'pa'*
+path (pa) string (default on Unix: ".,/usr/include,,"
+ on OS/2: ".,/emx/include,,"
+ other systems: ".,,")
+ global
+ {not in Vi}
+ This is a list of directories which will be searched when using the
+ gf, [f, ]f, ^Wf 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:
+ :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 where the current file is 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|.
+ - 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!
+
+ *'readonly'* *'ro'* *'noreadonly'* *'noro'*
+readonly (ro) toggle (default off)
+ local to buffer
+ {not in Vi}
+ If on, writes fail unless you use a '!'. Protects you from
+ accidentally overwriting a file. Default on when Vim is started
+ in view mode ("vim -v") 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 toggle (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. For the ":substitute" command the number of
+ substitutions is used instead of the number of lines.
+
+ *'restorescreen'* *'rs'* *'norestorescreen'* *'nors'*
+restorescreen (rs) toggle (default on)
+ global
+ {not in Vi} {Windows 95/NT version only}
+ When set, the screen contents is restored when exiting Vim. This also
+ happens when executing external commands.
+
+ *'revins'* *'ri'* *'norevins'* *'nori'*
+revins (ri) toggle (default off)
+ global
+ {not in Vi}
+ {only when compiled with RIGHTLEFT defined}
+ Inserting characters in Insert mode will work backwards. See "typing
+ backwards" |ins_reverse|. This option can be toggled with the CTRL-B
+ command in Insert mode. This option is reset when 'compatible' or
+ 'paste' is set.
+
+ *'rightleft'* *'rl'* *'norightleft'* *'norl'*
+rightleft (rl) toggle (default off)
+ local to window
+ {not in Vi}
+ {only when compiled with RIGHTLEFT defined}
+ When on, display orientation becomes right-to-left, i.e., character
+ that are stored in the file apear 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
+ sometimes usefull when editing Hebrew TeX--XeT files). See
+ |vim_rlh.txt|.
+
+ *'ruler'* *'ru'* *'noruler'* *'noru'*
+ruler (ru) toggle (default off)
+ global
+ {not in Vi}
+ Show the line and column number of the cursor position in the status
+ line, separated by a comma. If there are characters in the line that
+ take two positions on the screen, both the "real" column 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|.
+
+ *'scroll'* *'scr'*
+scroll (scr) number (default 'lines' / 2)
+ 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 'lines' / 2 with
+ ":set scroll=0". {difference from vi: 'scroll' gives the number of
+ screen lines instead of file lines, makes a difference when lines
+ wrap}
+
+ *'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.
+
+ *'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).
+
+ *'sections'* *'sect'*
+sections (sect) string (default "SHNHH HUnhsh")
+ global
+ Specifies the nroff macros that separate sections. These are pairs of
+ two letters (See section 6.4 |object_motions|).
+
+ *'secure'* *'nosecure'*
+secure toggle (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.
+
+ *'shell'* *'sh'*
+shell (sh) string (default $SHELL or "sh",
+ MS-DOS and Win32: "command",
+ OS/2: "cmd")
+ global
+ Name of the shell to use for ! and :! commands. When changing the
+ value also check the 'shelltype', 'shellpipe' and 'shellredir'
+ options. 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|.
+
+ *'shellpipe'* *'sp'*
+shellpipe (sp) string (default ">", "| tee", "|& tee" or "2>&1| tee")
+ global
+ {not in Vi}
+ 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.
+ 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.
+ In the future pipes may be used for filtering and this option will
+ become obsolete (at least for Unix).
+
+ *'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 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.
+ 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).
+
+ *'shelltype'* *'st'*
+shelltype (st) number (default 0)
+ global
+ {not in Vi}
+ 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 -c cmd' to start external commands
+ 1 and 3: use 'shell cmd' to start external commands
+
+ *'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
+shiftround (sr) toggle (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).
+
+ *'shiftwidth'* *'sw'*
+shiftwidth (sw) number (default 8)
+ local to buffer
+ Number of spaces to use for each step of (auto)indent.
+
+ *'shortmess'* *'shm'*
+shortmess (shm) string (default "")
+ global
+ {not in Vi}
+ This option helps to avoid all the "Hit return" messages 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
+ l use "999L, 888C" instead of "999 lines, 888 characters"
+ m use "[+]" instead of "[Modified]"
+ r use "[RO]" instead of "[readonly]"
+ x use "[tx]" instead of "[textmode]" and "[notx]" instead of
+ "[notextmode]"
+ f use "(3 of 5)" instead of "(file 3 of 5)"
+ i use "[noeol]" instead of "[Incomplete last line]"
+ n use "[New]" instead of "[New File]"
+ w use "[w]" instead of "written" for file write message.
+ 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)
+ W don't give "written" or "[w]" when writing a file
+ s don't give "search hit BOTTOM, continuing at TOP" or "search
+ hit TOP, continuing at BOTTOM" messages
+ t trunctate file message at the start if it is too long to fit
+ on the command line, "<" will appear in the left most column.
+ This gives you the opportunity to avoid that a change between buffers
+ requires you to hit return, 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.
+
+ *'shortname'* *'sn'* *'noshortname'* *'nosn'*
+shortname (sn) toggle (default off)
+ local to buffer
+ {not in Vi}
+ Filenames can be 8 characters plus one extension of 3 characters.
+ Multiple dots in file names are not allowed. When this option is on,
+ dots in filenames are replaced with underscores when adding an
+ extension (".~" or ".swp"). This option is not available for
+ MS-DOS and Win32, 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.
+
+ *'showbreak'* *'sbr'*
+showbreak (sbr) string (default "")
+ global
+ {not in Vi}
+ String to put at the start of lines that have been wrapped. Useful
+ values are "> " or "+++ ". Only printable 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).
+
+ *'showcmd'* *'sc'* *'noshowcmd'* *'nosc'*
+showcmd (sc) toggle (default on, off for Unix)
+ global
+ {not in Vi}
+ Show (partial) command in status line. Set this option off if your
+ terminal is slow.
+
+ *'showmatch'* *'sm'* *'noshowmatch'* *'nosm'*
+showmatch (sm) toggle (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.
+ 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.
+
+ *'showmode'* *'smd'* *'noshowmode'* *'nosmd'*
+showmode (smd) toggle (default on, off when compiled with COMPATIBLE
+ defined)
+ 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.
+
+ *'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.
+
+ *'smartcase'* *'scs'* *'nosmartcase'* *'noscs'*
+smartcase (scs) toggle (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..
+
+ *'smartindent'* *'si'* *'nosmartindent'* *'nosi'*
+smartindent (si) toggle (default off)
+ local to buffer
+ {not in Vi}
+ {Only included when compiled with SMARTINDENT defined,
+ check with ":version"}
+ Do smart autoindenting when starting a new line. Works best for C
+ 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.
+ 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.
+ 'smartindent' is reset when the 'paste' option is set.
+
+ *'smarttab'* *'sta'* *'nosmarttab'* *'nosta'*
+smarttab (sta) toggle (default off)
+ global
+ {not in Vi}
+ When on, a <Tab> in front of a line inserts 'shiftwidth' positions,
+ 'tabstop' in other places. When off a <Tab> always inserts 'tabstop'
+ positions, 'shiftwidth' is only used for ">>" and the like. See also
+ section 4.3.4 |ins_expandtab|.
+
+ *'splitbelow'* *'sb'* *'nosplitbelow'* *'nosb'*
+splitbelow (sb) toggle (default off)
+ global
+ {not in Vi}
+ When on, spliting a window will put the new window below the current
+ one.
+
+ *'startofline'* *'sol'* *'nostartofline'* *'nosol'*
+startofline (sol) toggle (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 and with "%" with a count. This option is
+ set when the 'compatible' option is set.
+
+ *'suffixes'* *'su'*
+suffixes (su) string (default ".bak,~,.o,.h,.info,.swp")
+ global
+ {not in Vi}
+ Files with these suffixes are ignored 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 include a dot or comma in a suffix, precede
+ it with a backslash (see |option_backslash| about including spaces and
+ backslashes).
+
+ *'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.
+
+ *'tabstop'* *'ts'*
+tabstop (ts) number (default 8)
+ local to buffer
+ Number of spaces that a <Tab> in the file counts for. (See also
+ ":retab" command in 11.3 |:retab|).
+
+ *'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) toggle (default on, off when compiled with COMPATIBLE
+ defined)
+ 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. When
+ the 'compatible' option is set, this option is reset.
+
+ *'tags'* *'tag'*
+tags (tag) string (default "./tags,tags", when compiled with
+ Emacs tags enabled: "./tags,./TAGS,tags,TAGS")
+ global
+ Filenames for the tag command, separated by spaces or commas. To
+ include a space or comma in a filename, 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. Environment variables are expanded |:set_env|.
+ Also see |tags_option|.
+ When Vim was compiled with EMACS_TAGS defined Emacs-style tag files
+ are also supported. They are automatically recognized. The default
+ value becomes "./tags,./TAGS,tags,TAGS". If ":version" shows
+ "+emacs_tags" then the Emacs tags support is included. {Vi: default
+ is "tags /usr/lib/tags"}
+
+ *'term'*
+term string (default is $TERM, if that fails:
+ on Unix: "ansi"
+ on Amiga: "amiga"
+ on MS-DOS: "pcterm"
+ on OS/2: "os2ansi"
+ 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|.
+
+ *'terse'* *'noterse'*
+terse toggle (default off)
+ global
+ {not in Vi}
+ 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) toggle (default on, off when compiled with COMPATIBLE
+ defined)
+ global
+ {not in Vi}
+ When starting to edit a file a check is done for the line separator.
+ If all lines end in <CR><NL> 'textmode' is set, otherwise 'textmode'
+ is reset. When reading a file, the same is done, but this happens
+ like 'textmode' has been set appropriately for that file only, the
+ option is not changed. See |textmode_io|.
+
+ *'textmode'* *'tx'* *'notextmode'* *'notx'*
+textmode (tx) toggle (MS-DOS, Win32 and OS/2: default on, others:
+ default off)
+ local to buffer
+ {not in Vi}
+ When off, <NL> separates lines. When on, <CR><NL> separates lines
+ and CTRL-Z at end of file is ignored. Only used when reading and
+ writing files. Set automatically when starting to edit a file and
+ 'textauto' is on. See |textmode_io|.
+
+ *'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|.
+
+ *'tildeop'* *'top'* *'notildeop'* *'notop'*
+tildeop (top) toggle (default off)
+ global
+ {not in Vi}
+ When on: The tilde command "~" behaves like an operator.
+
+ *'timeout'* *'to'* *'notimeout'* *'noto'*
+timeout (to) toggle (default on)
+ global
+ *'ttimeout'* *'nottimeout'*
+ttimeout toggle (default off)
+ global
+ {not in Vi}
+ These two options together determine the behaviour when part of a
+ mapped key sequence or keyboard code has been received:
+
+ timeout ttimeout action
+ off off no time out
+ on on or off time out on :mappings and key codes
+ off on time out on key codes
+
+ If there is no time out, 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'. With a
+ time out 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 time 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 time out in 1 second, set the ttimeout option and
+ reset the timeout option.
+
+ *'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. Normally only 'timeoutlen' is used and
+ 'ttimeoutline' 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 ttimeloutlen=100
+ (time out on mapping after three seconds, time out on key codes after
+ a tenth of a second).
+
+ *'title'* *'notitle'*
+title toggle (default off, on when title can be restored)
+ global
+ {not in Vi}
+ When on the title of the window will be set to "VIM - filename",
+ where filename is the name of the file currently being edited. Only
+ works if the terminal supports setting window titles (currently Amiga
+ console, Unix xterm and iris-ansi).
+ *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'|.
+ If the title cannot be restored, it is set to "Thanks for flying Vim".
+ You will have 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 (rather than using the "Thanks..." message).
+
+ *'ttybuiltin'* *'tbi'* *'nottybuiltin'* *'notbi'*
+ttybuiltin (tbi) toggle (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|.
+
+ *'ttyfast'* *'tf'* *'nottyfast'* *'notf'*
+ttyfast (tf) toggle (default off, on when 'term' is xterm, hpterm,
+ sun-cmd, scren, dtterm or iris-ansi)
+ 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.
+
+ *'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 and OS/2, 0 when
+ compiled with COMPATIBLE defined)
+ global
+ {not in Vi}
+ Maximum number of changes that can be undone. Set to 0 for Vi
+ compatibility: one level of undo and 'u' undoes itself. Set to a
+ negative number for no undo at all (saves memory).
+
+ *'updatecount'* *'uc'*
+updatecount (uc) number (default 200, 0 when compiled with COMPATIBLE
+ defined)
+ 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 |starting|. When editing in readonly
+ mode this option will be initialized to 10000. Also see |'swapsync'|.
+
+ *'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 chapter on recovery |crash_recovery|).
+
+ *'viminfo'* *'vi'*
+viminfo (vi) string (default "")
+ global
+ {not in Vi}
+ {only included when Vim was compiled with VIMINFO
+ defined, use ":version" to check this}
+ 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 characters and their meanings.
+ char value
+ ' Maximum number of previously edited files for which
+ the marks are remembered. This parameter must always
+ be included when 'viminfo' is non-empty.
+ 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").
+ 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:". Case is ignored. Maximum length
+ is 50 characters.
+ " Maximum number of lines saved for each register. If
+ zero then registers are not saved. If no number given
+ all lines are saved. Dont forget to put a backslash
+ before the ", otherwise it will be recognized as the
+ start of a comment!
+ : Maximum number of items in the command line history to
+ be saved. Default: value of 'history'.
+ / 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. Default:
+ value of 'history'.
+ Example:
+ :set viminfo='50,\"1000,:0
+ means that marks will be remembered for the last 50 files you edited,
+ contents of registers (up to 1000 lines each) will be remembered,
+ command line history will not be saved, and 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.
+
+ *'visualbell'* *'vb'* *'novisualbell'* *'novb'* *beep*
+visualbell (vb) toggle (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 of flash is wanted,
+ Does not work on the Amiga, you always get a screen flash. use ":set
+ vb t_vb=". Also see 'errorbells'.
+
+ *'warn'* *'nowarn'*
+warn toggle (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) toggle (default off)
+ global
+ {not in Vi}
+ Set this option for terminals that have a weird inversion method.
+ Makes the start/end invert code outputted before every character.
+ Slows down terminal I/O a lot, but it makes Visual mode work.
+
+ *'whichwrap'* *'ww'*
+whichwrap (ww) string (default "b,s", "" when compiled with
+ COMPATIBLE defined)
+ global
+ {not in Vi}
+ Allow specified keys that move the cursor left/right to wrap 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
+ [ <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 newline 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 'compatible' is set, 'whichwrap' is set to "".
+
+ *'wildchar'* *'wc'*
+wildchar (wc) number (default <Tab>, CTRL-E when compiled with
+ COMPATIBLE defined)
+ global
+ {not in Vi}
+ Character you have to type to start wildcard expansion in the
+ command line. CTRL-E is used when the 'compatible' option is set.
+ The character is not recognized when used inside a macro. Although
+ 'wc' is a number option, you can set it to a special key: ":set
+ wc=<Esc>".
+
+ *'winheight'* *'wh'*
+winheight (wh) number (default 0)
+ global
+ {not in Vi}
+ Minimal number of lines for the current window. 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. Set it to a small number for normal editing. The
+ height is not adjusted after one of the commands to change the
+ height of the current window.
+
+ *'wrap'* *'nowrap'*
+wrap toggle (default on)
+ local to window
+ {not in Vi}
+ 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
+ (also see 'sidescroll' option and |wrap_off|). If you want to break
+ long lines, see 'textwidth'.
+
+ *'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, a newline will be
+ inserted and inserting continues on the next line. When 'textwidth'
+ is non-zero, this option is not used. See also 'formatoptions' and
+ |ins_textwidth|. {Vi: works differently and less useful}
+
+ *'wrapscan'* *'ws'* *'nowrapscan'* *'nows'*
+wrapscan (ws) toggle (default on)
+ global
+ Searches wrap around the end of the file.
+
+ *'writeany'* *'wa'* *'nowriteany'* *'nowa'*
+writeany (wa) toggle (default off)
+ global
+ Allows writing to any file with no need for "!" override.
+
+ *'writebackup'* *'wb'* *'nowritebackup'* *'nowb'*
+writebackup (wb) toggle (default on, off when compiled with WRITEBACKUP
+ not defined or COMPATIBLE defined)
+ 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
+ the table in section 5.4 for another explanation |backup_table|.
+
+ *'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.
+
+
+20. 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 section 20.2 |terminal_options|.
+
+
+20.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*
+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. If terminfo is not used "-terminfo" is shown.
+
+On non-Unix systems a termcap is only available if Vim was compiled with
+TERMCAP defined.
+
+ *builtin_terms*
+Which builtin terminals are available depends on a few defines in feature.h,
+which needs 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".
+
+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".
+
+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>.
+
+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 3.4 |initialization|), otherwise its 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=\EA:". 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 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 problems 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 recognize this key sequence as a
+cursor key movement. To avoid this you could use these settings:
+ :set notimeout " don't timeout on mappings
+ :set ttimeout " do timeout on terminal key codes
+ :set timeoutlen=100 " timemout in 100 msec
+This requires the keys to be hit withing 100msec. When you type you normally
+are not that fast. The cursor key codes arrive within 100 msec, so they are
+still recognized.
+
+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.
+
+
+20.2 Terminal options *terminal_options*
+
+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. Two termcap codes are required:
+Cursor positioning and clear screen.
+
+OUTPUT CODES
+ option meaning
+
+ t_AL add number of blank lines *t_AL* *'t_AL'*
+ t_al add new blank line *t_al* *'t_al'*
+ 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 (required!) *t_cl* *'t_cl'*
+ t_cm cursor motion (required!) *t_cm* *'t_cm'*
+ t_CS if non-empty, cursor relative to scroll region *t_CS* *'t_CS'*
+ t_cs define scrolling region *t_cs* *'t_cs'*
+ 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_ke out of "keypad transmit" mode *t_ke* *'t_ke'*
+ t_ks put terminal in "keypad transmit" mode *t_ks* *'t_ks'*
+ t_md bold mode *t_md* *'t_md'*
+ t_me Normal mode (undoes t_mr and t_md) *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_RI cursor number of chars right *t_RI* *'t_RI'*
+ 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_ue underline end *t_ue* *'t_ue'*
+ t_us underline mode *t_us* *'t_us'*
+ 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_ZH italics mode *t_ZH* *'t_ZH'*
+ t_ZR italics end *t_ZR* *'t_ZR'*
+
+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'*
+ t_k2 <F2> function key 2 *t_k2* *'t_k2'*
+ t_k3 <F3> function key 3 *t_k3* *'t_k3'*
+ t_k4 <F4> function key 4 *t_k4* *'t_k4'*
+ t_k5 <F5> function key 5 *t_k5* *'t_k5'*
+ t_k6 <F6> function key 6 *t_k6* *'t_k6'*
+ t_k7 <F7> function key 7 *t_k7* *'t_k7'*
+ t_k8 <F8> function key 8 *t_k8* *'t_k8'*
+ t_k9 <F9> function key 9 *t_k9* *'t_k9'*
+ t_k; <F10> function key 10 *t_k;* *'t_k;'*
+ t_F1 <F11> function key 11 *t_F1* *'t_F1'*
+ t_F2 <F12> function key 12 *t_F2* *'t_F2'*
+ <S-F1) shifted function key 1
+ <S-F2> shifted function key 2
+ <S-F3> shifted function key 3
+ <S-F4> shifted function key 4
+ <S-F5> shifted function key 5
+ <S-F6> shifted function key 6
+ <S-F7> shifted function key 7
+ <S-F8> shifted function key 8
+ <S-F9> shifted function key 9
+ <S-F10> shifted function key 10
+ <S-F11> shifted function key 11
+ <S-F12> shifted function key 12
+ 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 <Delete> delete key *t_kD* *'t_kD'*
+ t_kb <BS> backspace key *t_kb* *'t_kb'*
+ t_kh <Home> home key *t_kh* *'t_kh'*
+ t_@7 <End> end key *t_@7* *'t_@7'*
+ t_kP <PageUp> page-up key *t_kP* *'t_kP'*
+ t_kN <PageDown> page-down key *t_kN* *'t_kN'*
+
+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 you terminal supports only one of the modes, both will
+look the same.
+
+If inversion or other highlighting does not work correctly, try setting the
+'weirdinvert' option. This makes the start-highlight or end-highlight termcap
+code to be outputted before every character. This slows down terminal I/O a
+lot, but it makes inversion work on some terminals.
+
+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>.
+
+Unfortunately it is not possible to deduct 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 is default "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)
+
+
+20.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*
+:mod[e] [mode]
+
+Without argument this only detects the screen size. 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
+
+
+20.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 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.
+
+ *hpterm*
+When you are using an hpterm you probably run into a few problems. The best
+thing to do is to use an xterm instead. If you want to use an hpterm for some
+reason, try (re)setting some options:
+ :set t_sr=
+ :set t_al=
+ :set t_dl=
+ :set ttyfast redraw screen instead of scrolling
+
+ :set weirdinvert makes highlighting work better, but
+ slows down screen updating a lot
+
+
+21. Differences from Vi and Ex *vi_differences*
+==============================
+
+Throughout this document differences between Vim and Vi/Ex are given in
+curly braces. This chapter only lists what has not been mentioned in
+previous chapters. Also see |vim_diff.txt| for an overview.
+
+
+21.1 Missing commands *missing_commands*
+
+A large number of the "Ex" commands (the commands that start with a colon)
+are included. However, there is no Ex mode.
+
+These commands are in Vi, but not in Vim.
+
+Q {Vi: go to Ex mode} See |pseudo-Q|.
+
+:a[ppend] {Vi: append text} *:a* *:append*
+:c[hange] {Vi: replace lines} *:c* *:change*
+:i[nsert] {Vi: insert text} *:i* *:insert*
+:o[pen] {Vi: start editing in open mode}*:o* *:open*
+:z {Vi: print some lines} *:z*
+
+
+21.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) toggle (default on) *'autoprint'* *'ap'*
+beautify (bf) toggle (default off) *'beautify'* *'bf'*
+flash (fl) toggle (default ??) *'flash'* *'fl'*
+graphic (gr) toggle (default off) *'graphic'* *'gr'*
+hardtabs (ht) number (default 8) *'hardtabs'* *'ht'*
+ number of spaces that a <Tab> moves on the display
+mesg toggle (default on) *'mesg'*
+novice toggle (default ??) *'novice'*
+open toggle (default on) *'open'*
+optimize (op) toggle (default off) *'optimize'* *'op'*
+prompt toggle (default on) *'prompt'*
+redraw toggle (default off) *'redraw'*
+slowopen (slow) toggle (default off) *'slowopen'* *'slow'*
+sourceany toggle (default off) *'sourceany'*
+tagstack (tgst) toggle (default on) *'tagstack'* *'tgst'*
+ enables the tagstack and ":pop".
+window (wi) number (default 23) *'window'* *'wi'*
+w300 number (default 23) *'w300'*
+w1200 number (default 23) *'w1200'*
+w9600 number (default 23) *'w9600'*
+
+
+21.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}.
+
+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 Only limited by available disk space for the swap
+ file.
+Length of a file name Unix and Win32: 1024 characters, otherwise 128
+ characters.
+Maximum display width Unix and Win32: 1024 characters, otherwise 255
+ characters
+
+Information for undo and registers are 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.
+
+
+CONTENTS *reference_contents* *ref* *reference*
+
+[Note: The commands for multiple windows and buffers are explained in
+a different file, see |vim_win.txt|]
+
+ 1. Introduction |intro|
+ 2. Notation |notation|
+ 3. Starting Vim |starting|
+ 3.1 Vim arguments |vim_arguments|
+ 3.2 Workbench (Amiga only) |workbench|
+ 3.3 Vim window (Amiga only) |amiga_window|
+ 3.4 Initialization |initialization|
+ 3.5 Suspending |suspend|
+ 3.6 The viminfo file |viminfo_file|
+ 4. Modes |vim_modes|
+ 4.1 Introduction
+ 4.2 Switching from mode to mode |mode_switching|
+ 4.3 Insert and Replace mode |mode_ins_repl|
+ 4.3.1 special keys |ins_special_keys|
+ 4.3.2 special special keys |ins_special_special|
+ 4.3.3 'textwidth' option |ins_textwidth|
+ 4.3.4 'expandtab' option |ins_expandtab|
+ 4.3.5 Replace mode |replace_mode|
+ 4.3.6 Insert mode completion |ins_completion|
+ 4.4 Command-line mode |mode_cmdline|
+ 4.4.1 Command line editing |cmdline_editing|
+ 4.4.2 Command line completion |cmdline_completion|
+ 4.4.3 Ex command lines |cmdline_lines|
+ 4.4.4 Ex command line ranges |cmdline_ranges|
+ 4.4.5 Ex special characters |cmdline_special|
+ 4.5 The window contents |window_contents|
+ 4.6 Abbreviations |abbreviations|
+ 4.7 Digraphs |digraphs|
+ 4.8 Using the mouse |mouse_using|
+ 4.9 Online help |online_help|
+ 5. Editing files |edit_files|
+ 5.1 Introduction |edit_intro|
+ 5.2 Editing a file |edit_a_file|
+ 5.3 The argument list |argument_list|
+ 5.4 Writing and quitting |write_quit|
+ 5.5 Using the QuickFix mode |quickfix|
+ 5.6 Editing binary files |edit_binary|
+ 5.7 Automatic commands |autocommand|
+ 6. Cursor motions |cursor_motions|
+ 6.1 Left-right motions |left_right_motions|
+ 6.2 Up-down motions |up_down_motions|
+ 6.3 Word motions |word_motions|
+ 6.4 Text object motions |object_motions|
+ 6.5 Text object selection |object_select|
+ 6.6 Pattern searches |pattern_searches|
+ 6.7 Various motions |various_motions|
+ 7. Scrolling |scrolling|
+ 8. Tags and special searches |tags_and_searches|
+ 8.1 Tags |tag_commands|
+ 8.2 Identifier searches |include_search|
+ 9. Inserting text |inserting|
+10. Deleting text |deleting|
+11. Changing text |changing|
+ 11.1 Delete and insert |delete_insert|
+ 11.2 Simple changes |simple_change|
+ 11.3 Complex changes |complex_change|
+ 11.4 Formatting text |formatting|
+ 11.5 Formatting C programs |C_indenting|
+12. Copying and moving text |copy_move|
+13. Visual mode |Visual_mode|
+14. Various commands |various|
+15. Repeating commands |repeating|
+ 15.1 Single repeats |single_repeat|
+ 15.2 Multiple repeats |multi_repeat|
+ 15.3 Complex repeats |complex_repeat|
+16. Undo and redo |undo_redo|
+17. Key mapping |key_mapping|
+18. Recovery after a crash |crash_recovery|
+ 18.1 The swap file |swap_file|
+ 18.2 Recovery |recovery|
+19. Options |options|
+ 19.1 Setting options |set_option|
+ 19.2 Automatically setting options |auto_setting|
+ 19.3 Saving settings |save_settings|
+ 19.4 Options summary |option_summary|
+20. Terminal information |terminal_info|
+ 20.1 Startup |startup|
+ 20.2 Terminal options |terminal_options|
+ 20.3 Window size |window_size|
+ 20.4 Slow and fast terminals |slow_fast_terminal|
+21. Differences from Vi and Ex |vi_differences|
+ 21.1 Missing commands |missing_commands|
+ 21.2 Missing options |missing_options|
+ 21.3 Limits |limits|
+
+ vim:tw=78:ts=8:sw=8: