Mercurial > emacs
changeset 82681:233f83a45168
Move refcards from etc/ to etc/refcards/
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Wed, 22 Aug 2007 07:27:59 +0000 |
parents | bea1e4690e03 |
children | 4bdbc3d9b88d |
files | etc/refcards/viperCard.tex |
diffstat | 1 files changed, 749 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/refcards/viperCard.tex Wed Aug 22 07:27:59 2007 +0000 @@ -0,0 +1,749 @@ +% ViperCard -- The Reference Card for Viper under GNU Emacs 21 and XEmacs 20 +%**start of header +\newcount\columnsperpage + +% 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. + +\columnsperpage=2 + +% Copyright (C) 1995, 1996, 1997, 2001, 2002, 2003, 2004, +% 2005, 2006, 2007 Free Software Foundation, Inc. + +% This file is part of GNU Emacs. + +% GNU Emacs is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 3, or (at your option) +% any later version. + +% GNU Emacs is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. + +% You should have received a copy of the GNU General Public License +% along with GNU Emacs; see the file COPYING. If not, write to +% the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +% Boston, MA 02110-1301, USA. + +% 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: kifer@cs.sunysb.edu +% +% Author of VIP 4.3: +% Aamod Sane +% email: sane@cs.uiuc.edu +% +% Author of VIP 3.5: +% Masahiko Sato +% email: ms@sail.stanford.edu +% +% The original TeX code for formatting the reference card was written by: +% Stephen Gildea +% UUCP: mit-erl!gildea +% email: gildea@stop.mail-abuse.org + + +\def\versionnumber{3.0} +\def\year{2007} +\def\version{August 2006 v\versionnumber} + +\def\shortcopyrightnotice{\vskip 1ex plus 2 fill + \centerline{\small \copyright\ \year\ Free Software Foundation, Inc. + Permissions on back. v\versionnumber}} + +\def\copyrightnotice{ +%\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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +\endgroup} + +% make \bye not \outer so that the \def\bye in the \else clause below +% can be scanned without complaint. +\def\bye{\par\vfill\supereject\end} + +\newdimen\intercolumnskip +\newbox\columna +\newbox\columnb + +\def\ncolumns{\the\columnsperpage} + +\message{[\ncolumns\space + 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}} +\else + %\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} +\fi + +% we won't be using math mode much, so redefine some of the characters +% we might want to talk about +\catcode`\^=12 +\catcode`\_=12 + +\chardef\\=`\\ +\chardef\{=`\{ +\chardef\}=`\} + +\hyphenation{mini-buf-fer} + +\parindent 0pt +\parskip 1ex plus .5ex minus .5ex + +\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip} + +\outer\def\newcolumn{\vfill\eject} + +\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex} + +\outer\def\section#1{\par\filbreak + \vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}% + \vskip 2ex plus 1ex minus 1.5ex} + +% masahiko +\outer\def\subsection#1{\par\filbreak + \vskip 2ex plus 2ex minus 2ex {\miniheadingfont #1}\mark{#1}% + \vskip 1ex plus 1ex minus 1.5ex} + +\newdimen\keyindent + +\def\beginindentedkeys{\keyindent=1em} +\def\endindentedkeys{\keyindent=0em} +\endindentedkeys + +\def\paralign{\vskip\parskip\halign} + +\def\<#1>{$\langle${\rm #1}$\rangle$} + +\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows + +\def\beginexample{\par\leavevmode\begingroup + \obeylines\obeyspaces\parskip0pt\tt} +{\obeyspaces\global\let =\ } +\def\endexample{\endgroup} + +\def\key#1#2{\leavevmode\hbox to \hsize{\vtop + {\hsize=.75\hsize\rightskip=1em + \hskip\keyindent\relax#1}\kbd{#2}\hfil}} + +\newbox\metaxbox +\setbox\metaxbox\hbox{\kbd{M-x }} +\newdimen\metaxwidth +\metaxwidth=\wd\metaxbox + +\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize + {\hskip\keyindent\relax#1\hfil}% + \hskip -\metaxwidth minus 1fil + \kbd{#2}\hfil}} + +\def\fivecol#1#2#3#4#5{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad + &\kbd{#3}\quad&\kbd{#4}\quad&\kbd{#5}\cr} + +\def\fourcol#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad + &\kbd{#3}\quad&\kbd{#4}\quad\cr} + +\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad + &\kbd{#3}\quad\cr} + +\def\twocol#1#2{\hskip\keyindent\relax\kbd{#1}\hfil&\kbd{#2}\quad\cr} + +\def\twocolkey#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad&\relax#3\hfil&\kbd{#4}\quad\cr} + +%**end of header + +\beginindentedkeys + +\title{ViperCard: Viper Reference Pal} + +\centerline{(Version 3.0 (Polyglot) for Emacs 21 and XEmacs 20)} + +%\copyrightnotice + +\section{Loading Viper} + +Just type \kbd{M-x viper-mode} followed by \kbd{RET} + +OR put + +(setq viper-mode t) +(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} +\key{from vi state to emacs state for 1 command}{$\backslash$} +\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} +\key{from insert state to vi state for 1 command}{C-z} + + +\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-$\backslash$} +\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} + +\shortcopyrightnotice + +\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} + + +\section{Counts} + +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 +lines. + +\section{Registers} + +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} + +\section{Files} + +\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} + +%\shortcopyrightnotice + +\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}} + +\section{Macros} + +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}{,} + +%\newcolumn +%\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} + +\endindentedkeys + +\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}{_} + +\section{Customization} + +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. + +\beginindentedkeys + +\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr +\twocol{{\bf variable}}{{\bf default value}} +\twocol{viper-search-wrap-around}{t} +\twocol{viper-case-fold-search}{nil} +\twocol{viper-re-search}{t} +\twocol{viper-re-replace}{t} +\twocol{viper-re-query-replace}{t} +\twocol{viper-auto-indent}{nil} +\twocol{viper-shift-width}{8} +\twocol{viper-tags-file-name}{"TAGS"} +\twocol{viper-no-multiple-ESC}{t} +\twocol{viper-ex-style-motion}{t} +\twocol{viper-always}{t} +\twocol{viper-custom-file-name}{"\~{}/.vip"} +\twocol{ex-find-file-shell}{"csh"} +\twocol{ex-cycle-other-window}{t} +\twocol{ex-cycle-through-non-buffers}{t} +\twocol{blink-matching-paren}{t} +\twocol{buffer-read-only}{{\it buffer dependent}} +} + +To bind keys in Vi command state, put lines like these in your +\kbd{\~{}/.vip} file: + +\beginexample +(define-key viper-vi-global-user-map "\\C-v" 'scroll-down) +(define-key viper-vi-global-user-map "\\C-cm" 'smail) +\endexample + + +\newcolumn + +\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 +\kbd{:.,.+10m\$} + +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} + +\endindentedkeys + +\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} + + +\copyrightnotice + +\bye + +% Local variables: +% compile-command: "tex viperCard" +% End: + +% arch-tag: e287b45c-4c5e-4bf9-ae28-ead4cd9f68e3