*various.txt*   For Vim version 7.3.  Last change: 2012 Jan 15


		  VIM REFERENCE MANUAL    by Bram Moolenaar


Various commands					*various*

1. Various commands		|various-cmds|
2. Using Vim like less or more	|less|

==============================================================================
1. Various commands					*various-cmds*

							*CTRL-L*
CTRL-L			Clear and redraw the screen.  The redraw may happen
			later, after processing typeahead.

							*:redr* *:redraw*
:redr[aw][!]		Redraw the screen right now.  When ! is included it is
			cleared first.
			Useful to update the screen halfway executing a script
			or function.  Also when halfway a mapping and
			'lazyredraw' is set.

						*:redraws* *:redrawstatus*
:redraws[tatus][!]	Redraw the status line of the current window.  When !
			is included all status lines are redrawn.
			Useful to update the status line(s) when 'statusline'
			includes an item that doesn't cause automatic
			updating.

							*N<Del>*
<Del>			When entering a number: Remove the last digit.
			Note: if you like to use <BS> for this, add this
			mapping to your .vimrc: >
				:map CTRL-V <BS>   CTRL-V <Del>
<			See |:fixdel| if your <Del> key does not do what you
			want.

:as[cii]	or					*ga* *:as* *:ascii*
ga			Print the ascii value of the character under the
			cursor in decimal, hexadecimal and octal.  For
			example, when the cursor is on a 'R':
				<R>  82,  Hex 52,  Octal 122 ~
			When the character is a non-standard ASCII character,
			but printable according to the 'isprint' option, the
			non-printable version is also given.  When the
			character is larger than 127, the <M-x> form is also
			printed.  For example:
				<~A>  <M-^A>  129,  Hex 81,  Octal 201 ~
				<p>  <|~>  <M-~>  254,  Hex fe,  Octal 376 ~
			(where <p> is a special character)
			The <Nul> character in a file is stored internally as
			<NL>, but it will be shown as:
				<^@>  0,  Hex 00,  Octal 000 ~
			If the character has composing characters these are
			also shown.  The value of 'maxcombine' doesn't matter.
			Mnemonic: Get Ascii value.  {not in Vi}

							*g8*
g8			Print the hex values of the bytes used in the
			character under the cursor, assuming it is in |UTF-8|
			encoding.  This also shows composing characters.  The
			value of 'maxcombine' doesn't matter.
			Example of a character with two composing characters:
				e0 b8 81 + e0 b8 b9 + e0 b9 89 ~
			{not in Vi} {only when compiled with the |+multi_byte|
			feature}

							*8g8*
8g8			Find an illegal UTF-8 byte sequence at or after the
			cursor.  This works in two situations:
			1. when 'encoding' is any 8-bit encoding
			2. when 'encoding' is "utf-8" and 'fileencoding' is
			   any 8-bit encoding
			Thus it can be used when editing a file that was
			supposed to be UTF-8 but was read as if it is an 8-bit
			encoding because it contains illegal bytes.
			Does not wrap around the end of the file.
			Note that when the cursor is on an illegal byte or the
			cursor is halfway a multi-byte character the command
			won't move the cursor.
			{not in Vi} {only when compiled with the |+multi_byte|
			feature}

						*:p* *:pr* *:print* *E749*
:[range]p[rint] [flags]
			Print [range] lines (default current line).
			Note: If you are looking for a way to print your text
			on paper see |:hardcopy|.  In the GUI you can use the
			File.Print menu entry.
			See |ex-flags| for [flags].

:[range]p[rint] {count} [flags]
			Print {count} lines, starting with [range] (default
			current line |cmdline-ranges|).
			See |ex-flags| for [flags].

							*:P* *:Print*
:[range]P[rint] [count] [flags]
			Just as ":print".  Was apparently added to Vi for
			people that keep the shift key pressed too long...
			Note: A user command can overrule this command.
			See |ex-flags| for [flags].

							*:l* *:list*
:[range]l[ist] [count] [flags]
			Same as :print, but display unprintable characters
			with '^' and put $ after the line.  This can be
			further changed with the 'listchars' option.
			See |ex-flags| for [flags].

							*:nu* *:number*
:[range]nu[mber] [count] [flags]
			Same as :print, but precede each line with its line
			number.  (See also 'highlight' and 'numberwidth'
			option).
			See |ex-flags| for [flags].

							*:#*
:[range]# [count] [flags]
			synonym for :number.

							*:#!*
:#!{anything}		Ignored, so that you can start a Vim script with: >
				#!vim -S
				echo "this is a Vim script"
				quit
<
							*:z* *E144*
:{range}z[+-^.=]{count}	Display several lines of text surrounding the line
			specified with {range}, or around the current line
			if there is no {range}.  If there is a {count}, that's
			how many lines you'll see; if there is only one window
			then twice the value of the 'scroll' option is used,
			otherwise the current window height minus 3 is used.

			If there is a {count} the 'window' option is set to
			its value.

			:z can be used either alone or followed by any of
			several punctuation marks.  These have the following
			effect:

			mark   first line    last line      new cursor line ~
			----   ----------    ---------      ------------
			+      current line  1 scr forward  1 scr forward
			-      1 scr back    current line   current line
			^      2 scr back    1 scr back     1 scr back
			.      1/2 scr back  1/2 scr fwd    1/2 scr fwd
			=      1/2 scr back  1/2 scr fwd    current line

			Specifying no mark at all is the same as "+".
			If the mark is "=", a line of dashes is printed
			around the current line.

:{range}z#[+-^.=]{count}				*:z#*
			Like ":z", but number the lines.
			{not in all versions of Vi, not with these arguments}

							*:=*
:= [flags]		Print the last line number.
			See |ex-flags| for [flags].

:{range}= [flags]	Prints the last line number in {range}.  For example,
			this prints the current line number: >
				:.=
<			See |ex-flags| for [flags].

: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} are executed like they
			are typed.  For undo all commands are undone together.
			Execution stops when an error is encountered.
			If the [!] is given, mappings will not be used.
			{commands} should be a complete command.  If
			{commands} does not finish a command, the last one
			will be aborted as if <Esc> or <C-C> was typed.
			The display isn't updated while ":normal" is busy.
			This implies that an insert command must be completed
			(to start Insert mode, see |:startinsert|).  A ":"
			command must be completed as well.  And you can't use
			"Q" or "gQ" to start Ex mode.
			{commands} cannot start with a space.  Put a count of
			1 (one) before it, "1 " is one space.
			The 'insertmode' option is ignored for {commands}.
			This command cannot be followed by another command,
			since any '|' is considered part of the command.
			This command can be used recursively, but the depth is
			limited by 'maxmapdepth'.
			When this command is called from a non-remappable
			mapping |:noremap|, the argument can be mapped anyway.
			An alternative is to use |:execute|, which uses an
			expression as argument.  This allows the use of
			printable characters to represent special characters.
			Example: >
				:exe "normal \<c-w>\<c-w>"
<			{not in Vi, of course}
			{not available when the |+ex_extra| feature was
			disabled at compile time}

:{range}norm[al][!] {commands}				*:normal-range*
			Execute Normal mode commands {commands} for each line
			in the {range}.  Before executing the {commands}, the
			cursor is positioned in the first column of the range,
			for each line.  Otherwise it's the same as the
			":normal" command without a range.
			{not in Vi}
			{not available when |+ex_extra| feature was disabled
			at compile time}

							*:sh* *:shell* *E371*
:sh[ell]		This command starts a shell.  When the shell exits
			(after the "exit" command) you return to Vim.  The
			name for the shell command comes from 'shell' option.
							*E360*
			Note: This doesn't work when Vim on the Amiga was
			started in QuickFix mode from a compiler, because the
			compiler will have set stdin to a non-interactive
			mode.

							*:!cmd* *:!* *E34*
:!{cmd}			Execute {cmd} with the shell.  See also the 'shell'
			and 'shelltype' option.
			Any '!' in {cmd} is replaced with the previous
			external command (see also 'cpoptions').  But not when
			there is a backslash before the '!', then that
			backslash is removed.  Example: ":!ls" followed by
			":!echo ! \! \\!" executes "echo ls ! \!".
			After the command has been executed, the timestamp of
			the current file is checked |timestamp|.
			A '|' in {cmd} is passed to the shell, you cannot use
			it to append a Vim command.  See |:bar|.
			A newline character ends {cmd}, what follows is
			interpreted as a following ":" command.  However, if
			there is a backslash before the newline it is removed
			and {cmd} continues.  It doesn't matter how many
			backslashes are before the newline, only one is
			removed.
			On Unix the command normally runs in a non-interactive
			shell.  If you want an interactive shell to be used
			(to use aliases) set 'shellcmdflag' to "-ic".
			For Win32 also see |:!start|.
			Vim redraws the screen after the command is finished,
			because it may have printed any text.  This requires a
			hit-enter prompt, so that you can read any messages.
			To avoid this use: >
				:silent !{cmd}
<			The screen is not redrawn then, thus you have to use
			CTRL-L or ":redraw!" if the command did display
			something.
			Also see |shell-window|.

							*:!!*
:!!			Repeat last ":!{cmd}".

							*:ve* *:version*
:ve[rsion]		Print the version number of the editor.  If the
			compiler used understands "__DATE__" the compilation
			date is mentioned.  Otherwise a fixed release-date is
			shown.
			The following lines contain information about which
			features were enabled when Vim was compiled.  When
			there is a preceding '+', the feature is included,
			when there is a '-' it is excluded.  To change this,
			you have to edit feature.h and recompile Vim.
			To check for this in an expression, see |has()|.
			Here is an overview of the features.
			The first column shows the smallest version in which
			they are included:
			   T	tiny
			   S	small
			   N	normal
			   B	big
			   H	huge
			   m	manually enabled or depends on other features
			 (none) system dependent
			Thus if a feature is marked with "N", it is included
			in the normal, big and huge versions of Vim.

							*+feature-list*
   *+ARP*		Amiga only: ARP support included
B  *+arabic*		|Arabic| language support
N  *+autocmd*		|:autocmd|, automatic commands
m  *+balloon_eval*	|balloon-eval| support. Included when compiling with
			supported GUI (Motif, GTK, GUI) and either
			Netbeans/Sun Workshop integration or |+eval| feature.
N  *+browse*		|:browse| command
N  *+builtin_terms*	some terminals builtin |builtin-terms|
B  *++builtin_terms*	maximal terminals builtin |builtin-terms|
N  *+byte_offset*	support for 'o' flag in 'statusline' option, "go"
			and ":goto" commands.
N  *+cindent*		|'cindent'|, C indenting
N  *+clientserver*	Unix and Win32: Remote invocation |clientserver|
   *+clipboard*		|clipboard| support
N  *+cmdline_compl*	command line completion |cmdline-completion|
N  *+cmdline_hist*	command line history |cmdline-history|
N  *+cmdline_info*	|'showcmd'| and |'ruler'|
N  *+comments*		|'comments'| support
B  *+conceal*		"conceal" support, see |conceal| |:syn-conceal| etc.
N  *+cryptv*		encryption support |encryption|
B  *+cscope*		|cscope| support
m  *+cursorbind*	|'cursorbind'| support
m  *+cursorshape*	|termcap-cursor-shape| support
m  *+debug*		Compiled for debugging.
N  *+dialog_gui*	Support for |:confirm| with GUI dialog.
N  *+dialog_con*	Support for |:confirm| with console dialog.
N  *+dialog_con_gui*	Support for |:confirm| with GUI and console dialog.
N  *+diff*		|vimdiff| and 'diff'
N  *+digraphs*		|digraphs| *E196*
   *+dnd*		Support for DnD into the "~ register |quote_~|.
B  *+emacs_tags*	|emacs-tags| files
N  *+eval*		expression evaluation |eval.txt|
N  *+ex_extra*		Vim's extra Ex commands: |:center|, |:left|,
			|:normal|, |:retab| and |:right|
N  *+extra_search*	|'hlsearch'| and |'incsearch'| options.
B  *+farsi*		|farsi| language
N  *+file_in_path*	|gf|, |CTRL-W_f| and |<cfile>|
N  *+find_in_path*	include file searches: |[I|, |:isearch|,
			|CTRL-W_CTRL-I|, |:checkpath|, etc.
N  *+folding*		|folding|
   *+footer*		|gui-footer|
   *+fork*		Unix only: |fork| shell commands
   *+float*		Floating point support
N  *+gettext*		message translations |multi-lang|
   *+GUI_Athena*	Unix only: Athena |GUI|
   *+GUI_neXtaw*	Unix only: neXtaw |GUI|
   *+GUI_GTK*		Unix only: GTK+ |GUI|
   *+GUI_Motif*		Unix only: Motif |GUI|
   *+GUI_Photon*	QNX only:  Photon |GUI|
m  *+hangul_input*	Hangul input support |hangul|
   *+iconv*		Compiled with the |iconv()| function
   *+iconv/dyn*		Likewise |iconv-dynamic| |/dyn|
N  *+insert_expand*	|insert_expand| Insert mode completion
N  *+jumplist*		|jumplist|
B  *+keymap*		|'keymap'|
B  *+langmap*		|'langmap'|
N  *+libcall*		|libcall()|
N  *+linebreak*		|'linebreak'|, |'breakat'| and |'showbreak'|
N  *+lispindent*	|'lisp'|
N  *+listcmds*		Vim commands for the list of buffers |buffer-hidden|
			and argument list |:argdelete|
N  *+localmap*		Support for mappings local to a buffer |:map-local|
m  *+lua*		|Lua| interface
m  *+lua/dyn*		|Lua| interface |/dyn|
N  *+menu*		|:menu|
N  *+mksession*		|:mksession|
N  *+modify_fname*	|filename-modifiers|
N  *+mouse*		Mouse handling |mouse-using|
N  *+mouseshape*	|'mouseshape'|
B  *+mouse_dec*		Unix only: Dec terminal mouse handling |dec-mouse|
N  *+mouse_gpm*		Unix only: Linux console mouse handling |gpm-mouse|
B  *+mouse_netterm*	Unix only: netterm mouse handling |netterm-mouse|
N  *+mouse_pterm*		QNX only: pterm mouse handling |qnx-terminal|
N  *+mouse_sysmouse*	Unix only: *BSD console mouse handling |sysmouse|
N  *+mouse_urxvt*		Unix only: urxvt mouse handling |urxvt-mouse|
N  *+mouse_xterm*		Unix only: xterm mouse handling |xterm-mouse|
B  *+multi_byte*		16 and 32 bit characters |multibyte|
   *+multi_byte_ime*	Win32 input method for multibyte chars |multibyte-ime|
N  *+multi_lang*		non-English language support |multi-lang|
m  *+mzscheme*		Mzscheme interface |mzscheme|
m  *+mzscheme/dyn*	Mzscheme interface |mzscheme-dynamic| |/dyn|
m  *+netbeans_intg*	|netbeans|
m  *+ole*			Win32 GUI only: |ole-interface|
N  *+path_extra*		Up/downwards search in 'path' and 'tags'
m  *+perl*		Perl interface |perl|
m  *+perl/dyn*		Perl interface |perl-dynamic| |/dyn|
N  *+persistent_undo*	Persistent undo |undo-persistence|
   *+postscript*		|:hardcopy| writes a PostScript file
N  *+printer*		|:hardcopy| command
H  *+profile*		|:profile| command
m  *+python*		Python 2 interface |python|
m  *+python/dyn*		Python 2 interface |python-dynamic| |/dyn|
m  *+python3*		Python 3 interface |python|
m  *+python3/dyn*		Python 3 interface |python-dynamic| |/dyn|
N  *+quickfix*		|:make| and |quickfix| commands
N  *+reltime*		|reltime()| function, 'hlsearch'/'incsearch' timeout,
			'redrawtime' option
B  *+rightleft*		Right to left typing |'rightleft'|
m  *+ruby*		Ruby interface |ruby|
m  *+ruby/dyn*		Ruby interface |ruby-dynamic| |/dyn|
N  *+scrollbind*		|'scrollbind'|
B  *+signs*		|:sign|
N  *+smartindent*		|'smartindent'|
m  *+sniff*		SniFF interface |sniff|
N  *+startuptime*		|--startuptime| argument
N  *+statusline*		Options 'statusline', 'rulerformat' and special
			formats of 'titlestring' and 'iconstring'
m  *+sun_workshop*	|workshop|
N  *+syntax*		Syntax highlighting |syntax|
   *+system()*		Unix only: opposite of |+fork|
N  *+tag_binary*		binary searching in tags file |tag-binary-search|
N  *+tag_old_static*	old method for static tags |tag-old-static|
m  *+tag_any_white*	any white space allowed in tags file |tag-any-white|
m  *+tcl*			Tcl interface |tcl|
m  *+tcl/dyn*		Tcl interface |tcl-dynamic| |/dyn|
   *+terminfo*		uses |terminfo| instead of termcap
N  *+termresponse*	support for |t_RV| and |v:termresponse|
N  *+textobjects*		|text-objects| selection
   *+tgetent*		non-Unix only: able to use external termcap
N  *+title*		Setting the window 'title' and 'icon'
N  *+toolbar*		|gui-toolbar|
N  *+user_commands*	User-defined commands. |user-commands|
N  *+viminfo*		|'viminfo'|
N  *+vertsplit*		Vertically split windows |:vsplit|
N  *+virtualedit*		|'virtualedit'|
S  *+visual*		Visual mode |Visual-mode|
N  *+visualextra*		extra Visual mode commands |blockwise-operators|
N  *+vreplace*		|gR| and |gr|
N  *+wildignore*		|'wildignore'|
N  *+wildmenu*		|'wildmenu'|
S  *+windows*		more than one window
m  *+writebackup*		|'writebackup'| is default on
m  *+xim*			X input method |xim|
   *+xfontset*		X fontset support |xfontset|
m  *+xpm_w32*		Win32 GUI only: pixmap support |:sign-define|
   *+xsmp*		XSMP (X session management) support
   *+xsmp_interact*	interactive XSMP (X session management) support
N  *+xterm_clipboard*	Unix only: xterm clipboard handling
m  *+xterm_save*		save and restore xterm screen |xterm-screens|
N  *+X11*			Unix only: can restore window title |X11|

							*/dyn* *E370* *E448*
			To some of the features "/dyn" is added when the
			feature is only available when the related library can
			be dynamically loaded.

:ve[rsion] {nr}		Is now ignored.  This was previously used to check the
			version number of a .vimrc file.  It was removed,
			because you can now use the ":if" command for
			version-dependent behavior.  {not in Vi}

							*:redi* *:redir*
:redi[r][!] > {file}	Redirect messages to file {file}.  The messages which
			are the output of commands are written to that file,
			until redirection ends.  The messages are also still
			shown on the screen.  When [!] is included, an
			existing file is overwritten.  When [!] is omitted,
			and {file} exists, this command fails.
			Only one ":redir" can be active at a time.  Calls to
			":redir" will close any active redirection before
			starting redirection to the new target.
			To stop the messages and commands from being echoed to
			the screen, put the commands in a function and call it
			with ":silent call Function()".
			An alternative is to use the 'verbosefile' option,
			this can be used in combination with ":redir".
			{not in Vi}

:redi[r] >> {file}	Redirect messages to file {file}.  Append if {file}
			already exists.  {not in Vi}

:redi[r] @{a-zA-Z}
:redi[r] @{a-zA-Z}>	Redirect messages to register {a-z}.  Append to the
			contents of the register if its name is given
			uppercase {A-Z}.  The ">" after the register name is
			optional. {not in Vi}
:redi[r] @{a-z}>>	Append messages to register {a-z}. {not in Vi}

:redi[r] @*>		
:redi[r] @+>		Redirect messages to the selection or clipboard. For
			backward compatibility, the ">" after the register
			name can be omitted. See |quotestar| and |quoteplus|.
			{not in Vi}
:redi[r] @*>>		
:redi[r] @+>>		Append messages to the selection or clipboard.
			{not in Vi}

:redi[r] @">		Redirect messages to the unnamed register. For
			backward compatibility, the ">" after the register
			name can be omitted. {not in Vi}
:redi[r] @">>		Append messages to the unnamed register. {not in Vi}

:redi[r] => {var}	Redirect messages to a variable.  If the variable
			doesn't exist, then it is created.  If the variable
			exists, then it is initialized to an empty string.
			The variable will remain empty until redirection ends.
			Only string variables can be used.  After the
			redirection starts, if the variable is removed or
			locked or the variable type is changed, then further
			command output messages will cause errors. {not in Vi}

:redi[r] =>> {var}	Append messages to an existing variable.  Only string
			variables can be used. {not in Vi}

:redi[r] END		End redirecting messages.  {not in Vi}

						*:sil* *:silent*
:sil[ent][!] {command}	Execute {command} silently.  Normal messages will not
			be given or added to the message history.
			When [!] is added, error messages will also be
			skipped, and commands and mappings will not be aborted
			when an error is detected.  |v:errmsg| is still set.
			When [!] is not used, an error message will cause
			further messages to be displayed normally.
			Redirection, started with |:redir|, will continue as
			usual, although there might be small differences.
			This will allow redirecting the output of a command
			without seeing it on the screen.  Example: >
			    :redir >/tmp/foobar
			    :silent g/Aap/p
			    :redir END
<			To execute a Normal mode command silently, use the
			|:normal| command.  For example, to search for a
			string without messages: >
			    :silent exe "normal /path\<CR>"
<			":silent!" is useful to execute a command that may
			fail, but the failure is to be ignored.  Example: >
			    :let v:errmsg = ""
			    :silent! /^begin
			    :if v:errmsg != ""
			    : ... pattern was not found
<			":silent" will also avoid the hit-enter prompt.  When
			using this for an external command, this may cause the
			screen to be messed up.  Use |CTRL-L| to clean it up
			then.
			":silent menu ..." defines a menu that will not echo a
			Command-line command.  The command will still produce
			messages though.  Use ":silent" in the command itself
			to avoid that: ":silent menu .... :silent command".

						*:uns* *:unsilent*
:uns[ilent] {command}	Execute {command} not silently.  Only makes a
			difference when |:silent| was used to get to this
			command.
			Use this for giving a message even when |:silent| was
			used.  In this example |:silent| is used to avoid the
			message about reading the file and |:unsilent| to be
			able to list the first line of each file. >
    		:silent argdo unsilent echo expand('%') . ": " . getline(1)
<

						*:verb* *:verbose*
:[count]verb[ose] {command}
			Execute {command} with 'verbose' set to [count].  If
			[count] is omitted one is used. ":0verbose" can be
			used to set 'verbose' to zero.
			The additional use of ":silent" makes messages
			generated but not displayed.
			The combination of ":silent" and ":verbose" can be
			used to generate messages and check them with
			|v:statusmsg| and friends.  For example: >
				:let v:statusmsg = ""
				:silent verbose runtime foobar.vim
				:if v:statusmsg != ""
				:  " foobar.vim could not be found
				:endif
<			When concatenating another command, the ":verbose"
			only applies to the first one: >
				:4verbose set verbose | set verbose
<				  verbose=4 ~
				  verbose=0 ~
			For logging verbose messages in a file use the
			'verbosefile' option.

							*:verbose-cmd*
When 'verbose' is non-zero, listing the value of a Vim option or a key map or
an abbreviation or a user-defined function or a command or a highlight group
or an autocommand will also display where it was last defined.  If it was
defined manually then there will be no "Last set" message.  When it was
defined while executing a function, user command or autocommand, the script in
which it was defined is reported.
{not available when compiled without the |+eval| feature}

							*K*
K			Run a program to lookup the keyword under the
			cursor.  The name of the program is given with the
			'keywordprg' (kp) option (default is "man").  The
			keyword is formed of letters, numbers and the
			characters in 'iskeyword'.  The keyword under or
			right of the cursor is used.  The same can be done
			with the command >
				:!{program} {keyword}
<			There is an example of a program to use in the tools
			directory of Vim.  It is called 'ref' and does a
			simple spelling check.
			Special cases:
			- If 'keywordprg' is empty, the ":help" command is
			  used.  It's a good idea to include more characters
			  in 'iskeyword' then, to be able to find more help.
			- When 'keywordprg' is equal to "man", a count before
			  "K" is inserted after the "man" command and before
			  the keyword.  For example, using "2K" while the
			  cursor is on "mkdir", results in: >
				!man 2 mkdir
<			- When 'keywordprg' is equal to "man -s", a count
			  before "K" is inserted after the "-s".  If there is
			  no count, the "-s" is removed.
			{not in Vi}

							*v_K*
{Visual}K		Like "K", but use the visually highlighted text for
			the keyword.  Only works when the highlighted text is
			not more than one line.  {not in Vi}

[N]gs							*gs* *:sl* *:sleep*
:[N]sl[eep] [N]	[m]	Do nothing for [N] seconds.  When [m] is included,
			sleep for [N] milliseconds.  The count for "gs" always
			uses seconds.  The default is one second. >
			     :sleep	     "sleep for one second
			     :5sleep	     "sleep for five seconds
			     :sleep 100m     "sleep for a hundred milliseconds
			     10gs	     "sleep for ten seconds
<			Can be interrupted with CTRL-C (CTRL-Break on MS-DOS).
			"gs" stands for "goto sleep".
			While sleeping the cursor is positioned in the text,
			if at a visible position.  {not in Vi}
			Also process the received netbeans messages. {only
			available when compiled with the |+netbeans_intg|
			feature}


							*g_CTRL-A*
g CTRL-A		Only when Vim was compiled with MEM_PROFILING defined
			(which is very rare): print memory usage statistics.
			Only useful for debugging Vim.

==============================================================================
2. Using Vim like less or more					*less*

If you use the less or more program to view a file, you don't get syntax
highlighting.  Thus you would like to use Vim instead.  You can do this by
using the shell script "$VIMRUNTIME/macros/less.sh".

This shell script uses the Vim script "$VIMRUNTIME/macros/less.vim".  It sets
up mappings to simulate the commands that less supports.  Otherwise, you can
still use the Vim commands.

This isn't perfect.  For example, when viewing a short file Vim will still use
the whole screen.  But it works good enough for most uses, and you get syntax
highlighting.

The "h" key will give you a short overview of the available commands.

 vim:tw=78:ts=8:ft=help:norl:
