Anonymous committed 4cd537c


Comments (0)

Files changed (3)

+1998-01-17  SL Baur  <>
+	* etc/viperCard.tex: Move.
 1998-01-12  SL Baur  <>
 	* Makefile: Update to newer package interface.
 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
-VERSION = 1.02
+VERSION = 1.03
 PACKAGE = viper
 PKG_TYPE = regular
 REQUIRES = xemacs-base


+% ViperCard -- The Reference Card for Viper under GNU Emacs 20 and XEmacs 20
+%**start of header
+% This file can be printed with 1 or 2 columns per page (see below).
+% Specify how many you want here.  Nothing else needs to be changed.
+% Copyright (c) 1995, 1996, 1997 Free Software Foundation, Inc.
+% This file is part of GNU Emacs.
+% This file is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY.  No author or distributor
+% accepts responsibility to anyone for the consequences of using it
+% or for whether it serves any particular purpose or describes
+% any piece of software unless they say so in writing.  Refer to the
+% GNU Emacs General Public License for full details.
+% Permission is granted to copy, modify and redistribute this source
+% file provided the copyright notice and permission notices are
+% preserved on all copies.
+% Permission is granted to process this file through TeX and print the
+% results, provided the printed document carries copyright and
+% permission notices identical to the ones below.
+% This file is intended to be processed by plain TeX (TeX82).
+% The final reference card has six columns, three on each side.
+% This file can be used to produce it in any of three ways:
+% 1 column per page
+%    produces six separate pages, each of which needs to be reduced to 80%.
+%    This gives the best resolution.
+% 2 columns per page
+%    produces three already-reduced pages.
+%    You will still need to cut and paste.
+% 3 columns per page
+%    produces two pages which must be printed sideways to make a
+%    ready-to-use 8.5 x 11 inch reference card.
+%    For this you need a dvi device driver that can print sideways.
+% Which mode to use is controlled by setting \columnsperpage above.
+% Author of Viper:
+%  Michael Kifer
+%  email:
+% Author of VIP 4.3:
+%  Aamod Sane
+%  email:
+% Author of VIP 3.5:
+%  Masahiko Sato
+%  email:
+% The original TeX code for formatting the reference card was written by:
+%  Stephen Gildea
+%  UUCP: mit-erl!gildea
+%  email:
+\def\version{August \year\ v\versionnumber}
+\def\shortcopyrightnotice{\vskip 1ex plus 2 fill
+  \centerline{\small \copyright\ \year\ Free Software Foundation, Inc.
+  Permissions on back.  v\versionnumber}}
+%\vskip 1ex plus 2 fill\begingroup\small
+\vskip 1ex \begingroup\small
+\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
+\centerline{by Michael Kifer, Viper \version}
+\centerline{by Aamod Sane, VIP version 4.3}
+\centerline{by Masahiko Sato, VIP version 3.5}
+Permission is granted to make and distribute copies of
+this card provided the copyright notice and this permission notice
+are preserved on all copies.
+For copies of the GNU Emacs manual, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+% make \bye not \outer so that the \def\bye in the \else clause below
+% can be scanned without complaint.
+  column\if 1\ncolumns\else s\fi\space per page]}
+\def\scaledmag#1{ scaled \magstep #1}
+% This multi-way format was designed by Stephen Gildea
+% October 1986.
+% Slightly modified by Masahiko Sato, September 1987.
+\if 1\ncolumns
+  \hsize 4in
+  \vsize 10in
+  %\voffset -.7in
+  \voffset -.57in
+  \font\titlefont=\fontname\tenbf \scaledmag3
+  \font\headingfont=\fontname\tenbf \scaledmag2
+  \font\miniheadingfont=\fontname\tenbf \scaledmag1 % masahiko
+  \font\smallfont=\fontname\sevenrm
+  \font\smallsy=\fontname\sevensy
+  \footline{\hss\folio}
+  \def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
+  %\hsize 3.2in
+  %\vsize 7.95in
+  \hsize 3.41in % masahiko
+  \vsize 8in % masahiko
+  \hoffset -.75in
+  \voffset -.745in
+  \font\titlefont=cmbx10 \scaledmag2
+  \font\headingfont=cmbx10 \scaledmag1
+  \font\miniheadingfont=cmbx10 % masahiko
+  \font\smallfont=cmr6
+  \font\smallsy=cmsy6
+  \font\eightrm=cmr8
+  \font\eightbf=cmbx8
+  \font\eightit=cmti8
+  \font\eightsl=cmsl8
+  \font\eighttt=cmtt8
+  \font\eightsy=cmsy8
+  \textfont0=\eightrm
+  \textfont2=\eightsy
+  \def\rm{\eightrm}
+  \def\bf{\eightbf}
+  \def\it{\eightit}
+  \def\sl{\eightsl} % masahiko
+  \def\tt{\eighttt}
+  \normalbaselineskip=.8\normalbaselineskip
+  \normallineskip=.8\normallineskip
+  \normallineskiplimit=.8\normallineskiplimit
+  \normalbaselines\rm           %make definitions take effect
+  \if 2\ncolumns
+    \let\maxcolumn=b
+    \footline{\hss\rm\folio\hss}
+    \def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}}
+  \else \if 3\ncolumns
+    \let\maxcolumn=c
+    \nopagenumbers
+  \else
+    \errhelp{You must set \columnsperpage equal to 1, 2, or 3.}
+    \errmessage{Illegal number of columns per page}
+  \fi\fi
+  %\intercolumnskip=.46in
+  \intercolumnskip=.19in % masahiko .19x4 + 3.41x3 = 10.99
+  \def\abc{a}
+  \output={%
+      % This next line is useful when designing the layout.
+      %\immediate\write16{Column \folio\abc\space starts with \firstmark}
+      \if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
+      \else\if a\abc
+        \global\setbox\columna\columnbox \global\def\abc{b}
+        %% in case we never use \columnb (two-column mode)
+        \global\setbox\columnb\hbox to -\intercolumnskip{}
+      \else
+        \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
+  \def\multicolumnformat{\shipout\vbox{\makeheadline
+      \hbox{\box\columna\hskip\intercolumnskip
+        \box\columnb\hskip\intercolumnskip\columnbox}
+      \makefootline}\advancepageno}
+  \def\columnbox{\leftline{\pagebody}}
+  \def\bye{\par\vfill\supereject
+    \if a\abc \else\null\vfill\eject\fi
+    \if a\abc \else\null\vfill\eject\fi
+    \end}  
+% we won't be using math mode much, so redefine some of the characters
+% we might want to talk about
+\parindent 0pt
+\parskip 1ex plus .5ex minus .5ex
+\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex}
+  \vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}%
+  \vskip 2ex plus 1ex minus 1.5ex}
+% masahiko
+  \vskip 2ex plus 2ex minus 2ex {\miniheadingfont #1}\mark{#1}%
+  \vskip 1ex plus 1ex minus 1.5ex}
+\def\<#1>{$\langle${\rm #1}$\rangle$}
+\def\kbd#1{{\tt#1}\null}        %\null so not an abbrev even if period follows
+  \obeylines\obeyspaces\parskip0pt\tt}
+{\obeyspaces\global\let =\ }
+\def\key#1#2{\leavevmode\hbox to \hsize{\vtop
+  {\hsize=.75\hsize\rightskip=1em
+  \hskip\keyindent\relax#1}\kbd{#2}\hfil}}
+\setbox\metaxbox\hbox{\kbd{M-x }}
+\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
+  {\hskip\keyindent\relax#1\hfil}%
+  \hskip -\metaxwidth minus 1fil
+  \kbd{#2}\hfil}}
+  &\kbd{#3}\quad&\kbd{#4}\quad&\kbd{#5}\cr}
+  &\kbd{#3}\quad&\kbd{#4}\quad\cr}
+  &\kbd{#3}\quad\cr}
+%**end of header
+\title{ViperCard: Viper Reference Pal}
+\centerline{(For Version 2.96 under Emacs 20 and XEmacs 20)}
+\section{Loading Viper}
+Just type \kbd{M-x viper-mode} followed by \kbd{RET}
+OR put (require 'viper) in .emacs
+\section{Viper States}
+Viper has four states: {\it emacs state}, {\it vi state}, {\it insert state}, 
+{\it replace state}.
+Mode line tells you which state you are in.
+In emacs state you can do all the normal GNU Emacs editing.
+This card explains only vi state and insert state (replace state is similar
+to insert state).
+{\bf GNU Emacs Reference Card} explains emacs state.
+You can switch states as follows.
+\key{from emacs state to vi state}{C-z}
+\key{from vi state to emacs state}{C-z}
+\metax{from vi state to insert state}{i, I, a, A, o, O}
+\metax{from vi state to replace state}{c, C, R}
+\key{from insert or replace state to vi state}{ESC}
+\section{Insert Mode}
+You can do editing in insert state.
+\metax{go back to vi state}{ESC}
+\metax{delete previous character}{C-h, DEL}
+\key{delete previous word}{C-w}
+\key{delete line word}{C-u}
+\key{indent shiftwidth forward}{C-t}
+\key{indent shiftwidth backward}{C-d}
+\key{delete line word}{C-u}
+\key{quote following character}{C-v}
+\key{emulate Meta key in emacs state}{C-\\}
+\key{escape to Vi state for one command}{C-z}
+\vskip 2mm
+{\bf The rest of this card explains commands in {\bf vi state}.}
+\section{Getting Information on Viper}
+Execute info command by typing \kbd{M-x info} and select menu item
+\kbd{viper}.  Also:
+\key{describe function attached to the key {\it x}}{$\backslash$ C-h k {\it x}}
+\section{Leaving Emacs}
+\metax{suspend Emacs}{:st {\rm or} :su}
+\metax{exit Emacs permanently}{C-xC-c}
+\metax{exit current file}{:wq {\rm or} :q}
+\section{Error Recovery}
+\metax{abort command}{C-c (user level = 1)}
+\metax{abort command}{C-g (user level > 1)}
+\key{redraw messed up screen}{C-l}
+\metax{{\bf recover} after system crash}{:rec file}
+\metax{restore a buffer }{:e!\ {\rm or} M-x revert-buffer}
+Most commands in vi state accept a {\it count} which can be supplied as a
+prefix to the commands.  In most cases, if a count is given, the
+command is executed that many times.  E.g., \kbd{5 d d} deletes 5
+There are 26 registers (\kbd{a} to \kbd{z}) that can store texts
+and marks.
+You can append a text at the end of a register (say \kbd{x}) by
+specifying the register name in capital letter (say \kbd{X}).
+There are also 9 read only registers (\kbd{1} to \kbd{9}) that store
+up to 9 previous changes.
+We will use {\it x\/} to denote a register.
+\section{Entering Insert Mode}
+\key{{\bf insert} at point}{i}
+\key{{\bf append} after cursor}{a}
+\key{{\bf insert} before first non-white}{I}
+\key{{\bf append} at end of line}{A}
+\key{{\bf open} line below}{o}
+\key{{\bf open} line above}{O}
+\section{Buffers and Windows}
+\key{move cursor to {\bf next} window}{C-x o}
+\key{delete current window}{C-x 0}
+\key{delete other windows}{C-x 1}
+\key{split current window into two windows}{C-x 2}
+\key{{\bf switch} to a buffer in the current window}{C-x {\sl buffer}}
+\metax{{\bf switch} to a buffer in another window}{:n, :b, {\rm or} C-x 4 {\sl buf}}
+\key{{\bf kill} a buffer}{:q! {\rm or} C-x k}
+\key{list existing {\bf buffers}}{:args {\rm or} C-x b}
+\metax{{\bf visit} file in the current window}{v {\sl file} {\rm or} :e {\sl file}}
+\key{{\bf visit} file in another window}{V {\sl file}}
+\key{{\bf visit} file in another frame}{C-v {\sl file}}
+\key{{\bf save} buffer to the associated file}{:w {\rm or} C-xC-s}
+\metax{{\bf write} buffer to a specified file}{:w {\sl file} {\rm or} C-xC-w}
+\metax{{\bf insert} a specified file at point}{:r {\sl file} {\rm or} C-xi}
+\key{{\bf get} information on the current {\bf file}}{C-c g {\rm or} :f}
+\key{run the {\bf directory} editor}{:e RET {\rm or} C-xd}
+\section{Viewing the Buffer}
+\key{scroll to next screen}{C-f}
+\key{scroll to previous screen}{C-b}
+\key{scroll {\bf down} half screen}{C-d}
+\key{scroll {\bf up} half screen}{C-u}
+\key{scroll down one line}{C-e}
+\key{scroll up one line}{C-y}
+\key{put current line on the {\bf home} line}{z H {\rm or} z RET}
+\key{put current line on the {\bf middle} line}{z M {\rm or} z .}
+\key{put current line on the {\bf last} line}{z L {\rm or} z -}
+\section{Marking and Returning}
+\key{{\bf mark} point in register {\it x}}{m {\it x}}
+\key{set mark at buffer beginning}{m <}
+\key{set mark at buffer end}{m >}
+\key{set mark at point}{m .}
+\key{jump to mark}{m ,}
+\key{exchange point and mark}{` `}
+\key{... and skip to first non-white on line}{' '}
+\key{go to mark {\it x}}{` {\it x}}
+\key{... and skip to first non-white on line}{' {\it x}}
+\key{view contents of marker {\it x}}{[ {\it x}}
+\key{view contents of register {\it x}}{] {\it x}}
+Emacs style macros:
+\key{start remembering keyboard macro}{C-x (}
+\key{finish remembering keyboard macro}{C-x )}
+\key{call last keyboard macro}{*}
+\key{start remembering keyboard macro}{@ \#}
+\key{finish macro and put into register {\it x}}{@ {\it x}}
+\key{execute macro stored in register {\it x}}{@ {\it x}}
+\key{repeat last @{\it x} command}{@ @}
+\key{Pull last macro into register {\it x}}{@ ! {\it x}}
+Vi-style macros (keys to be hit in quick succession):
+\key{define Vi-style macro for Vi state}{:map}
+\key{define Vi-style macro for Insert state}{:map!}
+\key{toggle case-sensitive search}{//}
+\key{toggle regular expression search}{///}
+\key{toggle `\%' to ignore parentheses inside comments}{\%\%\%}
+\section{Motion Commands}
+\key{go backward one character}{h {\rm or} C-h}
+\key{go forward one character}{l}
+\metax{next line keeping the column}{j {\rm or} LF {\rm or} C-n}
+\key{previous line keeping the column}{k}
+\metax{next line at first non-white}{+ {\rm or} RET {\rm or} C-p}
+\key{previous line at first non-white}{-}
+\key{beginning of line}{0}
+\key{first non-white on line}{^}
+\key{end of line}{\$}
+\key{go to {\it n}-th column on line}{{\it n} |}
+\key{go to {\it n}-th line}{{\it n} G}
+\key{go to last line}{G}
+\key{find matching parenthesis for \kbd{()}, \kbd{\{\}} and \kbd{[]}}{\%}
+\key{go to {\bf home} window line}{H}
+\key{go to {\bf middle} window line}{M}
+\key{go to {\bf last} window line}{L}
+\subsection{Words, Sentences, Paragraphs, Headings}
+\key{forward {\bf word}}{w {\rm or} W}
+\key{{\bf backward} word}{b {\rm or} B}
+\key{{\bf end} of word}{e {\rm or} E}
+In the case of capital letter commands, a word is delimited by a
+non-white character.
+\key{forward sentence}{)}
+\key{backward sentence}{(}
+\key{forward paragraph}{\}}
+\key{backward paragraph}{\{}
+\key{forward heading}{]]}
+\key{backward heading}{[[}
+\key{end of heading}{[]}
+\subsection{Find Characters on the Line}
+\key{{\bf find} {\it c} forward on line}{f {\it c}}
+\key{{\bf find} {\it c} backward on line}{F {\it c}}
+\key{up {\bf to} {\it c} forward on line}{t {\it c}}
+\key{up {\bf to} {\it c} backward on line}{T {\it c}}
+\key{repeat previous \kbd{f}, \kbd{F}, \kbd{t} or \kbd{T}}{;}
+\key{... in the opposite direction}{,}
+%\title{Viper Quick Reference Card}
+\section{Searching and Replacing}
+\key{search forward for {\sl pat}}{/ {\sl pat}}
+\key{search backward with previous {\sl pat}}{?\ RET}
+\key{search forward with previous {\sl pat}}{/ RET}
+\key{search backward for {\sl pat}}{?\ {\sl pat}}
+\key{repeat previous search}{n}
+\key{... in the opposite direction}{N}
+\key{{\bf query} replace}{Q}
+\key{{\bf replace} a character by another character {\it c}}{r {\it c}}
+\key{{\bf overwrite} {\it n} lines}{{\it n} R}
+\metax{{\bf buffer} search (if enabled)}{g {\it move command}}
+\section{Modifying Commands}
+Most commands that operate on text regions accept the motion commands,
+to describe regions. They also accept the Emacs region specifications
+{\bf r} and {\bf R}. {\bf r} describes the region between {\it point}
+and {\it mark}, and {\bf R} describes whole lines in that region.
+Motion commands are classified into {\it point commands} and
+{\it line commands}.  In the case of line commands, whole lines will
+be affected by the command.
+The point commands are as follows:
+\hskip 5ex
+\kbd{h l 0 ^ \$ w W b B e E ( ) / ?\ ` f F t T \% ; ,}
+The line commands are as follows:
+\hskip 5ex
+\kbd{j k + - H M L \{ \} G '}
+These region specifiers will be referred to as {\it m} below.
+\subsection{Delete/Yank/Change Commands}
+\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\cr
+\fourcol{}{{\bf delete}}{{\bf yank}}{{\bf change}}
+\fourcol{region determined by {\it m}}{d {\it m}}{y {\it m}}{c {\it m}}
+\fourcol{... into register {\it x}}{" {\it x\/} d {\it m}}{" {\it x\/} y {\it m}}{" {\it x\/} c {\it m}}
+\fourcol{a line}{d d}{Y {\rm or} y y}{c c}
+\fourcol{current {\bf region}}{d r}{y r}{c r}
+\fourcol{expanded {\bf region}}{d R}{y R}{c R}
+\fourcol{to end of line}{D}{y \$}{c \$}
+\fourcol{a character after point}{x}{y l}{c l}
+\fourcol{a character before point}{DEL}{y h}{c h}
+\vskip 2ex
+\key{Overwrite {\it n} lines}{{\it n} R}
+\subsection{Put Back Commands}
+Deleted/yanked/changed text can be put back by the following commands.
+\key{{\bf Put} back at point/above line}{P}
+\key{... from register {\it x}}{" {\it x\/} P}
+\key{{\bf put} back after point/below line}{p}
+\key{... from register {\it x}}{" {\it x\/} p}
+\subsection{Repeating and Undoing Modifications}
+\key{{\bf undo} last change}{u {\rm or} :und}
+\key{repeat last change}{.\ {\rm (dot)}}
+Undo is undoable by \kbd{u} and repeatable by \kbd{.}.
+For example, \kbd{u...} will undo 4 previous changes.
+A \kbd{.} after \kbd{5dd} is equivalent to \kbd{5dd},
+while \kbd{3.} after \kbd{5dd} is equivalent to \kbd{3dd}.
+\section{Miscellaneous Commands}
+\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\tabskip=0pt&#\cr
+\fivecol{}{{\bf shift left}}{{\bf shift right}}{{\bf filter shell command}}{{\bf indent}}
+\fivecol{region}{< {\it m}}{> {\it m}}{!\ {\it m\/} {\sl shell-com}}{= {\it m}}
+\fivecol{line}{< <}{> >}{!\ !\ {\sl shell-com}}{= =}
+\key{{\bf join} lines}{J}
+\key{toggle case (takes count)}{\~{}}
+\key{view register {\it x}}{] {\it x}}
+\key{view marker {\it x}}{] {\it x}}
+\key{lowercase region}{\# c {\it m}}
+\key{uppercase region}{\# C {\it m}}
+\key{execute last keyboard macro on each line in the region}{\# g {\it m}}
+\key{insert specified string for each line in the region}{\# q {\it m}}
+\key{check spelling of the words in the region}{\# s {\it m}}
+\key{repeat previous ex substitution}{\&}
+\key{change to previous file}{C-^}
+\key{Viper Meta key}{_}
+By default, search is case sensitive.
+You can change this by including the following line in your \kbd{\~{}/.vip} file.
+\hskip 5ex
+\kbd{(setq viper-case-fold-search t)}
+The following is a subset of the variety of
+options available for customizing Viper.
+See the Viper manual for details on these and other options.
+\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
+\twocol{{\bf variable}}{{\bf default value}}
+\twocol{buffer-read-only}{{\it buffer dependent}}
+To bind keys in Vi command state, put lines like these in your
+\kbd{\~{}/.vip} file:
+(define-key viper-vi-global-user-map "\\C-v" 'scroll-down)
+(define-key viper-vi-global-user-map "\\C-cm" 'smail)
+\title{Ex Commands in Viper}
+In vi state, an Ex command is entered by typing:
+\hskip 5ex
+\kbd{:\ {\sl ex-command} RET}
+\section{Ex Addresses}
+\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=2pt&#\tabskip=5pt plus 1 fil&#\cr
+\twocolkey{current line}{.}{next line with {\sl pat}}{/ {\sl pat} /}
+\twocolkey{line {\it n}}{{\it n}}{previous line with {\sl pat}}{?\ {\sl pat} ?}
+\twocolkey{last line}{\$}{{\it n\/} line before {\it a}}{{\it a} - {\it n}}
+\twocolkey{next line}{+}{{\it a\/} through {\it b}}{{\it a\/} , {\it b}}
+\twocolkey{previous line}{-}{line marked with {\it x}}{' {\it x}}
+\twocolkey{entire buffer}{\%}{previous context}{' '}
+Addresses can be specified in front of a command.
+For example,
+\hskip 5ex
+moves 11 lines below current line to the end of buffer.
+\section{Ex Commands}
+Avoid Ex text manipulation commands except substitute. 
+There are better VI equivalents
+for all of them. Also note that all Ex commands expand \% to
+current file name. To include a \% in the command, escape it with a $\backslash$.
+Similarly, \# is replaced by previous file. For Viper, this is the
+first  file in the {\sl :args} listing for that buffer. This defaults
+to the previous file in the VI sense if you have one window.
+Ex commands can be made to have history. See the manual for details.
+\subsection{Ex Text Commands}
+\key{mark lines matching {\sl pat} and execute {\sl cmds} on these lines}{:g /{\sl pat}/ {\sl cmds}}
+\key{mark lines {\it not\/} matching {\sl pat} and execute {\sl cmds} on these lines}{:v /{\sl pat}/ {\sl cmds}}
+\key{{\bf move} specified lines after {\sl addr}}{:m {\sl addr}}
+\key{{\bf copy} specified lines after {\sl addr}}{:co\rm\ (or \kbd{:t})\ \sl addr}
+\key{{\bf delete} specified lines [into register {\it x\/}]}{:d {\rm [{\it x\/}]}}
+\key{{\bf yank} specified lines [into register {\it x\/}]}{:y {\rm [{\it x\/}]}}
+\key{{\bf put} back text [from register {\it x\/}]}{:pu {\rm [{\it x\/}]}}
+\key{{\bf substitute} {\sl repl} for first string on line matching {\sl pat}}{:s /{\sl pat}/{\sl repl}/}
+\key{repeat last substitution}{:\&}
+\key{repeat previous substitute with previous search pattern as {\sl pat}}{:\~{}}
+\subsection{Ex File and Shell Commands}
+\key{{\bf edit} file}{:e {\sl file}}
+\key{reedit messed up current file}{:e!}
+\key{edit previous file}{:e\#}
+\key{{\bf read} in a file}{:r {\sl file}}
+\key{{\bf read} in the output of a shell command}{:r {\sl !command}}
+\key{write out specified lines into {\sl file}}{:w {\sl file}}
+\key{save all modified buffers, ask confirmation}{:W {\sl file}}
+\key{save all modified buffers, no confirmation}{:WW {\sl file}}
+\key{write out specified lines at the end of {\sl file}}{:w>> {\sl file}}
+\key{{\bf write} to the input of a shell command}{:w {\sl !command}}
+\key{write out and then quit}{:wq {\sl file}}
+\key{run a sub{\bf shell} in a window}{:sh}
+\key{execute shell command {\sl command}}{:!\ {\sl command}}
+\key{execute previous shell command with {\it args} appended}{:!! {\sl args}}
+\subsection{Ex Miscellaneous Commands}
+\key{define a macro {\it x} that expands to {\sl cmd}}{:map {\it x} {\sl cmd}}
+\key{remove macro expansion associated with {\it x}}{:unma {\it x}}
+\key{define a macro {\it x} that expands to {\sl cmd} in insert state}{:map!\ {\it x} {\sl cmd}}
+\key{remove macro expansion associated with {\it x} in insert state}{:unma!\ {\it x}}
+\key{print line number}{:.=}
+\key{print last line number}{:=}
+\key{print {\bf version} number of Viper}{:ve}
+\key{shift specified lines to the right}{:>}
+\key{shift specified lines to the left}{:<}
+\key{{\bf join} lines}{:j}
+\key{mark specified line to register {\it x}}{:k {\it x}}
+\key{{\bf set} a variable's value}{:se}
+\key{find first definition of {\bf tag} {\sl tag}}{:ta {\sl tag}}
+\key{Current directory}{:pwd}
+% Local variables:
+% compile-command: "tex viperCard"
+% End: