Mercurial > emacs
annotate man/viper.texi @ 59061:a7985894de81
Comment change.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Tue, 21 Dec 2004 11:50:52 +0000 |
| parents | b1ae5333057a |
| children | d96e54250eea 59dcbfe97385 |
| rev | line source |
|---|---|
| 25829 | 1 % -*-texinfo-*- |
| 2 \input texinfo | |
| 3 | |
| 4 @comment Using viper.info instead of viper in setfilename breaks DOS. | |
| 5 @comment @setfilename viper | |
| 6 @comment @setfilename viper.info | |
| 7 @setfilename ../info/viper | |
| 8 | |
|
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
9 @copying |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
10 Copyright @copyright{} 1995, 1996, 1997, 2001, 2002 Free Software |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
11 Foundation, Inc. |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
12 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
13 @quotation |
|
37404
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
14 Permission is granted to copy, distribute and/or modify this document |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
15 under the terms of the GNU Free Documentation License, Version 1.1 or |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
16 any later version published by the Free Software Foundation; with no |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
17 Invariant Sections, with the Front-Cover texts being ``A GNU |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
18 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
19 license is included in the section entitled ``GNU Free Documentation |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
20 License'' in the Emacs manual. |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
21 |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
22 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
23 this GNU Manual, like GNU software. Copies published by the Free |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
24 Software Foundation raise funds for GNU development.'' |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
25 |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
26 This document is part of a collection distributed under the GNU Free |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
27 Documentation License. If you want to distribute this document |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
28 separately from the collection, you can do so by adding a copy of the |
|
730f77edf073
Use GNU Free Documentation License.
Gerd Moellmann <gerd@gnu.org>
parents:
36857
diff
changeset
|
29 license to the document, as described in section 6 of the license. |
|
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
30 @end quotation |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
31 @end copying |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
32 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
33 @dircategory Emacs |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
34 @direntry |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
35 * VIPER: (viper). The newest Emacs VI-emulation mode. |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
36 (also, A VI Plan for Emacs Rescue |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
37 or the VI PERil.) |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
38 @end direntry |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
39 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
40 @finalout |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
41 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
42 @titlepage |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
43 @title Viper Is a Package for Emacs Rebels |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
44 @subtitle a Vi emulator for Emacs |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
45 @subtitle January 2002, Viper Version 3.11.2 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
46 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
47 @author Michael Kifer (Viper) |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
48 @author Aamod Sane (VIP 4.4) |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
49 @author Masahiko Sato (VIP 3.5) |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
50 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
51 @page |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
52 @vskip 0pt plus 1filll |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
53 @insertcopying |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
54 @end titlepage |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
55 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
56 @ifnottex |
| 25829 | 57 @node Top, Overview,, (DIR) |
| 58 | |
| 59 @unnumbered Viper | |
| 60 | |
| 61 We believe that one or more of the following statements are adequate | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
62 descriptions of Viper: |
| 25829 | 63 |
| 64 @example | |
| 65 Viper Is a Package for Emacs Rebels; | |
| 66 it is a VI Plan for Emacs Rescue | |
| 67 and/or a venomous VI PERil. | |
| 68 @end example | |
| 69 | |
| 70 Technically speaking, Viper is a Vi emulation package for Emacs. It | |
| 71 implements all Vi and Ex commands, occasionally improving on them and | |
| 72 adding many new features. It gives the user the best of both worlds: Vi | |
| 73 keystrokes for editing combined with the power of the Emacs environment. | |
| 74 | |
| 75 Viper emulates Vi at several levels, from the one that closely follows Vi | |
| 76 conventions to the one that departs from many of them. It has many | |
| 77 customizable options, which can be used to tailor Viper to the work habits | |
| 78 of various users. | |
| 79 This manual describes Viper, concentrating on the differences from Vi and | |
| 80 new features of Viper. | |
| 81 | |
| 82 Viper, formerly known as VIP-19, was written by Michael Kifer. It is based | |
| 83 on VIP version 3.5 by Masahiko Sato and VIP version 4.4 by Aamod Sane. | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
84 About 15% of the code still comes from those older packages. |
| 25829 | 85 |
| 86 Viper is intended to be usable without reading this manual --- the defaults | |
| 87 are set to make Viper as close to Vi as possible. At startup, Viper will | |
| 88 try to set the most appropriate default environment for you, based on | |
| 89 your familiarity with Emacs. It will also tell you the basic GNU Emacs window | |
| 90 management commands to help you start immediately. | |
| 91 | |
| 92 Although this manual explains how to customize Viper, some basic | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
93 familiarity with Emacs Lisp is a plus. |
| 25829 | 94 |
| 95 It is recommended that you read the Overview node. The other nodes may | |
| 96 be visited as needed. | |
| 97 | |
| 98 Comments and bug reports are welcome. | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
99 @code{kifer@@cs.stonybrook.edu} is the current address for Viper bug reports. |
| 25829 | 100 Please use the Ex command @kbd{:submitReport} for this purpose.@refill |
| 101 | |
|
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
47520
diff
changeset
|
102 @end ifnottex |
| 25829 | 103 |
| 104 @menu | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
105 * Overview:: Read for a smoother start |
| 25829 | 106 * Improvements over Vi:: New features, Improvements |
| 107 * Customization:: How to customize Viper | |
| 108 * Commands:: Vi and Ex Commands | |
| 109 | |
| 110 * Key Index:: Index of Vi and Ex Commands | |
| 111 * Function Index:: Index of Viper Functions | |
| 112 * Variable Index:: Index of Viper Variables | |
| 113 * Package Index:: Index of Packages Mentioned in this Document | |
| 114 * Concept Index:: Vi, Ex and Emacs concepts | |
| 115 | |
| 116 * Acknowledgments:: | |
| 117 @end menu | |
| 118 @iftex | |
| 119 @unnumbered Introduction | |
| 120 | |
| 121 We believe that one or more of the following statements are adequate | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
122 descriptions of Viper: |
| 25829 | 123 |
| 124 @example | |
| 125 Viper Is a Package for Emacs Rebels; | |
| 126 it is a VI Plan for Emacs Rescue | |
| 127 and/or a venomous VI PERil. | |
| 128 @end example | |
| 129 | |
| 130 Viper is a Vi emulation package for Emacs. Viper contains virtually all | |
| 131 of Vi and Ex functionality and much more. It gives you the best of both | |
| 132 worlds: Vi keystrokes for editing combined with the GNU Emacs | |
| 133 environment. Viper also fixes some common complaints with Vi commands. | |
| 134 This manual describes Viper, concentrating on the differences from Vi | |
| 135 and on the new features of Viper. | |
| 136 | |
| 137 Viper was written by Michael Kifer. It is based on VIP version 3.5 by | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
138 Masahiko Sato and VIP version 4.4 by Aamod Sane. About 15% of the code |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
139 still comes from those older packages. |
| 25829 | 140 |
| 141 Viper is intended to be usable out of the box, without reading this manual | |
| 142 --- the defaults are set to make Viper as close to Vi as possible. At | |
| 143 startup, Viper will attempt to set the most appropriate default environment | |
| 144 for you, based on your familiarity with Emacs. It will also tell you the | |
| 145 basic GNU Emacs window management commands to help you start immediately. | |
| 146 | |
| 147 Although this manual explains how to customize Viper, some basic | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
148 familiarity with Emacs Lisp is a plus. |
| 25829 | 149 |
| 150 It is recommended that you read the chapter Overview. The other chapters | |
| 151 will be useful for customization and advanced usage. | |
| 152 | |
| 153 You should also learn to use the Info on-line hypertext manual system that | |
| 154 comes with Emacs. This manual can be read as an Info file. Try the command | |
| 155 @kbd{@key{ESC} x info} with vanilla Emacs sometime. | |
| 156 | |
| 157 Comments and bug reports are welcome. | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
158 @code{kifer@@cs.stonybrook.edu} is the current address for Viper bug reports. |
| 25829 | 159 Please use the Ex command @kbd{:submitReport} for this purpose.@refill |
| 160 | |
| 161 @end iftex | |
| 162 | |
| 163 @node Overview,Improvements over Vi,Top,Top | |
| 164 @chapter Overview of Viper | |
| 165 | |
| 166 Viper is a Vi emulation on top of Emacs. At the same time, Viper provides a | |
| 167 virtually unrestricted access to Emacs facilities. Perfect compatibility | |
| 168 with Vi is possible but not desirable. This chapter tells you about the | |
| 169 Emacs ideas that you should know about, how to use Viper within Emacs and | |
| 170 some incompatibilities. | |
| 171 | |
|
38514
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
172 This manual is written with the assumption that you are an experienced Vi |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
173 user who wants to switch to Emacs while retaining the ability to edit files |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
174 Vi style. Incredible as it might seem, there are experienced Emacs users |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
175 who use Viper as a backdoor into the superior (as every Vi user already knows) |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
176 world of Vi! These users are well familiar with Emacs bindings and prefer them |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
177 in some cases, especially in the Vi Insert state. John Hawkins |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
178 <jshawkin@@eecs.umich.edu> has provided a set of customizations, which |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
179 enables additional Emacs bindings under Viper. These customizations can be |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
180 included in your @file{~/.viper} file and are found at the following URL: |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
181 @file{http://www.eecs.umich.edu/~jshawkin/viper-sample}. |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
182 |
| 25829 | 183 @menu |
| 184 * Emacs Preliminaries:: Basic concepts in Emacs. | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
185 * Loading Viper:: Loading and Preliminary Configuration. |
| 25829 | 186 * States in Viper:: Viper has four states orthogonal to Emacs |
| 187 modes. | |
| 188 * The Minibuffer:: Command line in Emacs. | |
| 189 * Multiple Files in Viper:: True multiple file handling. | |
| 190 * Unimplemented Features:: That are unlikely to be implemented. | |
| 191 @end menu | |
| 192 | |
| 193 @node Emacs Preliminaries, Loading Viper, Overview, Overview | |
| 194 @section Emacs Preliminaries | |
| 195 | |
| 196 @cindex buffer | |
| 197 @cindex point | |
| 198 @cindex mark | |
| 199 @cindex text | |
| 200 @cindex looking at | |
| 201 @cindex end (of buffer) | |
| 202 @cindex end (of line) | |
| 203 @cindex region | |
| 204 | |
| 205 Emacs can edit several files at once. A file in Emacs is placed in a | |
| 206 @dfn{buffer} that usually has the same name as the file. Buffers are also used | |
| 207 for other purposes, such as shell interfaces, directory editing, etc. | |
| 208 @xref{Dired,,Directory Editor,emacs,The | |
| 209 Gnu Emacs Manual}, for an example.@refill | |
| 210 | |
| 211 A buffer has a distinguished position called the @dfn{point}. | |
| 212 A @dfn{point} is always between 2 characters, and is @dfn{looking at} | |
| 213 the right hand character. The cursor is positioned on the right hand | |
| 214 character. Thus, when the @dfn{point} is looking at the end-of-line, | |
| 215 the cursor is on the end-of-line character, i.e.@: beyond the last | |
| 216 character on the line. This is the default Emacs behavior.@refill | |
| 217 | |
| 218 The default settings of Viper try to mimic the behavior of Vi, preventing | |
| 219 the cursor from going beyond the last character on the line. By using | |
| 220 Emacs commands directly (such as those bound to arrow keys), it is possible | |
| 221 to get the cursor beyond the end-of-line. However, this won't (or | |
| 222 shouldn't) happen if you restrict yourself to standard Vi keys, unless you | |
| 223 modify the default editing style. @xref{Customization}.@refill | |
| 224 | |
| 225 In addition to the @dfn{point}, there is another distinguished buffer | |
| 226 position called the @dfn{mark}. @xref{Mark,,Mark,emacs,The GNU Emacs | |
| 227 manual}, for more info on the mark. The text between the @dfn{point} and | |
| 228 the @dfn{mark} is called the @dfn{region} of the buffer. For the Viper | |
| 229 user, this simply means that in addition to the Vi textmarkers a--z, there | |
| 230 is another marker called @dfn{mark}. This is similar to the unnamed Vi | |
| 231 marker used by the jump commands @kbd{``} and @kbd{''}, which move the | |
| 232 cursor to the position of the last absolute jump. Viper provides access to | |
| 233 the region in most text manipulation commands as @kbd{r} and @kbd{R} suffix | |
| 234 to commands that operate on text regions, e.g., @kbd{dr} to delete region, | |
| 235 etc. | |
| 236 | |
| 237 Furthermore, Viper lets Ex-style commands to work on the current region. | |
| 238 This is done by typing a digit argument before @kbd{:}. For instance, | |
| 239 typing @kbd{1:} will propmt you with something like @emph{:123,135}, | |
| 240 assuming that the current region starts at line 123 and ends at line | |
| 241 135. There is no need to type the line numbers, since Viper inserts them | |
| 242 automatically in front of the Ex command. | |
| 243 | |
| 244 @xref{Basics}, for more info.@refill | |
| 245 | |
| 246 @cindex window | |
| 247 @cindex mode line | |
| 248 @cindex buffer information | |
| 249 @cindex Minibuffer | |
| 250 @cindex command line | |
| 251 @cindex buffer (modified) | |
| 252 | |
| 253 Emacs divides the screen into tiled @dfn{windows}. You can see the | |
| 254 contents of a buffer through the window associated with the buffer. The | |
| 255 cursor of the screen is positioned on the character after @dfn{point}. | |
| 256 Every window has a @dfn{mode line} that displays information about the buffer. | |
| 257 You can change the format of the mode | |
| 258 line, but normally if you see @samp{**} at the beginning of a mode line it | |
| 259 means that the buffer is @dfn{modified}. If you write out the contents of | |
| 260 a buffer to a file, then the buffer will become not modified. Also if | |
| 261 you see @samp{%%} at the beginning of the mode line, it means that the file | |
| 262 associated with the buffer is write protected. The mode line will also | |
| 263 show the buffer name and current major and minor modes (see below). | |
| 264 A special buffer called @dfn{Minibuffer} is displayed as the last line | |
| 265 in a Minibuffer window. The Minibuffer window is used for command input | |
| 266 output. Viper uses Minibuffer window for @kbd{/} and @kbd{:} | |
| 267 commands.@refill | |
| 268 | |
| 269 @cindex mode | |
| 270 @cindex keymap | |
| 271 @cindex local keymap | |
| 272 @cindex global keymap | |
| 273 @cindex major mode | |
| 274 @cindex minor mode | |
| 275 | |
| 276 An Emacs buffer can have a @dfn{major mode} that customizes Emacs for | |
| 277 editing text of a particular sort by changing the functionality of the keys. | |
| 278 Keys are defined using a @dfn{keymap} that records the bindings between | |
| 279 keystrokes and | |
| 280 functions. The @dfn{global keymap} is common to all the | |
| 281 buffers. Additionally, each buffer has its @dfn{local keymap} that determines the | |
| 282 @dfn{mode} of the buffer. If a function is bound to some key in the local | |
| 283 keymap then that function will be executed when you type the key. | |
| 284 If no function is bound to a key in the | |
| 285 local map, however, the function bound to the key in the global map | |
| 286 will be executed. @xref{Major Modes,Major Modes,Major Modes,emacs,The | |
| 287 GNU Emacs Manual}, for more information.@refill | |
| 288 | |
| 289 A buffer can also have a @dfn{minor mode}. Minor modes are options that | |
| 290 you can use or not. A buffer in @code{text-mode} can have | |
| 291 @code{auto-fill-mode} as minor mode, which can be turned off or on at | |
| 292 any time. In Emacs, a minor mode may have it own keymap, | |
| 293 which overrides the local keymap when the minor mode is turned on. For | |
| 294 more information, @pxref{Minor Modes,Minor Modes,Minor Modes,emacs,The | |
| 295 GNU Emacs Manual} @refill | |
| 296 | |
| 297 @cindex Viper as minor mode | |
| 298 @cindex Control keys | |
| 299 @cindex Meta key | |
| 300 | |
| 301 Viper is implemented as a collection of minor modes. Different minor modes | |
| 302 are involved when Viper emulates Vi command mode, Vi insert mode, etc. | |
| 303 You can also turn Viper on and off at any time while in Vi command mode. | |
| 304 @xref{States in Viper}, for | |
| 305 more information.@refill | |
| 306 | |
| 307 Emacs uses Control and Meta modifiers. These are denoted as C and M, | |
| 308 e.g.@: @kbd{^Z} as @kbd{C-z} and @kbd{Meta-x} as @kbd{M-x}. The Meta key is | |
| 309 usually located on each side of the Space bar; it is used in a manner | |
| 310 similar to the Control key, e.g., @kbd{M-x} means typing @kbd{x} while | |
| 311 holding the Meta key down. For keyboards that do not have a Meta key, | |
| 312 @key{ESC} is used as Meta. Thus @kbd{M-x} is typed as @kbd{@key{ESC} | |
| 313 x}. Viper uses @key{ESC} to switch from Insert state to Vi state. Therefore | |
| 314 Viper defines @kbd{C-\} as its Meta key in Vi state. @xref{Vi State}, for | |
| 315 more info.@refill | |
| 316 | |
| 55201 | 317 Emacs is structured as a Lisp interpreter around a C core. Emacs keys |
| 318 cause Lisp functions to be called. It is possible to call these | |
| 25829 | 319 functions directly, by typing @kbd{M-x function-name}. |
| 320 | |
| 321 @node Loading Viper, States in Viper, Emacs Preliminaries, Overview | |
| 322 @section Loading Viper | |
| 323 | |
| 324 The most common way to load it automatically is to include the following | |
| 325 lines (in the given order!): | |
| 326 | |
| 327 @lisp | |
| 328 (setq viper-mode t) | |
| 329 (require 'viper) | |
| 330 @end lisp | |
| 331 | |
| 332 @noindent | |
| 333 in your @file{~/.emacs} file. The @file{.emacs} file is placed in your | |
| 334 home directory and it is be executed every time you invoke Emacs. This is | |
| 335 the place where all general Emacs customization takes place. Beginning with | |
| 336 version 20.0, Emacsen have an interactive interface, which simplifies the | |
| 337 job of customization significantly. | |
| 338 | |
| 339 Viper also uses the file @file{~/.viper} for Viper-specific customization. | |
| 340 The location of Viper customization file can be changed by setting the | |
| 341 variable @code{viper-custom-file-name} in @file{.emacs} @emph{prior} to loading | |
| 342 Viper. | |
| 343 | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
344 The latest versions of Emacs have an interactive customization facility, |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
345 which allows you to (mostly) bypass the use of the @file{.emacs} and |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
346 @file{.viper} files. You can reach this customization |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
347 facility from within Viper's VI state by executing the Ex command |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
348 @kbd{:customize}. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
349 |
| 25829 | 350 Once invoked, Viper will arrange to bring up Emacs buffers in Vi state |
| 351 whenever this makes sense. | |
| 352 @xref{Packages that Change Keymaps}, to find out when forcing Vi command state | |
| 353 on a buffer may be counter-productive. | |
| 354 | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
355 Even if your @file{.emacs} file does not invoke Viper automatically, |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
356 you can still load Viper and enter the Vi command state by typing the |
| 25829 | 357 following from within Emacs: |
| 358 | |
| 359 @lisp | |
| 360 M-x viper-mode | |
| 361 @end lisp | |
| 362 | |
| 363 When Emacs first comes up, if you have not specified a file on the | |
| 364 command line, it will show the @samp{*scratch*} buffer, in the | |
| 365 @samp{Lisp Interaction} mode. After you invoke Viper, you can start | |
| 366 editing files by using @kbd{:e}, @kbd{:vi}, or @kbd{v} commands. | |
| 367 (@xref{File and Buffer Handling}, for more information on @kbd{v} and other | |
| 368 new commands that, in many cases, are more convenient than @kbd{:e}, | |
| 369 @kbd{:vi}, and similar old-style Vi commands.)@refill | |
| 370 | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
371 Finally, if at some point you would want to de-Viperize your running |
| 25829 | 372 copy of Emacs after Viper has been loaded, the command @kbd{M-x |
| 373 viper-go-away} will do it for you. The function @code{toggle-viper-mode} | |
| 374 toggles Viperization of Emacs on and off. | |
| 375 | |
| 376 @node States in Viper, The Minibuffer, Loading Viper,Overview | |
| 377 @section States in Viper | |
| 378 | |
| 379 @kindex @kbd{C-z} | |
| 380 @kindex @key{ESC} | |
| 381 @kindex @kbd{i} | |
| 382 @cindex Emacs state | |
| 383 @cindex Vi state | |
| 384 @cindex Insert state | |
| 385 @cindex Replace state | |
| 386 @cindex Ex commands | |
| 387 @findex @code{viper-go-away} | |
| 388 @findex @code{toggle-viper-mode} | |
| 389 | |
| 390 Viper has four states, Emacs, Vi, Insert, and Replace. | |
| 391 | |
| 392 @table @samp | |
| 393 @item Emacs state | |
| 394 This is the state plain vanilla Emacs is normally in. After you have loaded | |
| 395 Viper, @kbd{C-z} will normally take you to Vi command state. Another | |
| 396 @kbd{C-z} will take you back to Emacs state. This toggle key can be | |
| 397 changed, @pxref{Customization} You can also type @kbd{M-x viper-mode} to | |
| 398 change to Vi state.@refill | |
| 399 | |
| 400 | |
| 401 For users who chose to set their user level to 1 at Viper setup time, | |
| 402 switching to Emacs state is deliberately made harder in order to not | |
|
35411
be20c22dc16d
2001-01-19 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
35188
diff
changeset
|
403 confuse the novice user. In this case, @kbd{C-z} will either iconify Emacs |
|
be20c22dc16d
2001-01-19 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
35188
diff
changeset
|
404 (if Emacs runs as an application under X) or it will stop Emacs (if |
|
be20c22dc16d
2001-01-19 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
35188
diff
changeset
|
405 Emacs runs on a dumb terminal or in an Xterm window). |
| 25829 | 406 |
| 407 @item Vi state | |
| 408 This is the Vi command mode. Any of the Vi commands, such as @kbd{i, o, a}, | |
| 409 @dots{}, will take you to Insert state. All Vi commands may | |
| 410 be used in this mode. Most Ex commands can also be used. | |
| 411 For a full list of Ex commands supported by Viper, type | |
| 412 @kbd{:} and then @key{TAB}. To get help on any issue, including the Ex | |
| 413 commands, type @kbd{:help}. This will invoke Viper Info | |
| 414 (if it is installed). Then typing @kbd{i} will prompt you for a topic to | |
| 415 search in the index. Note: to search for Ex commands in the index, you | |
|
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
416 should start them with a @kbd{:}, e.g., @kbd{:WW}. |
| 25829 | 417 |
| 418 In Viper, Ex commands can be made to work on the current Emacs region. | |
| 419 This is done by typing a digit argument before @kbd{:}. | |
| 420 For instance, typing @kbd{1:} will propmt you with something like | |
| 421 @emph{:123,135}, assuming that the current region starts at line 123 and | |
| 422 ends at line 135. There is no need to type the line numbers, since Viper | |
| 423 inserts them automatically in front of the Ex command. | |
| 424 | |
| 425 @item Insert state | |
| 426 Insert state is the Vi insertion mode. @key{ESC} will take you back to | |
| 427 Vi state. Insert state editing can be done, including auto-indentation. By | |
| 39267 | 428 default, Viper disables Emacs key bindings in Insert state. |
| 25829 | 429 |
| 430 @item Replace state | |
| 431 Commands like @kbd{cw} invoke the Replace state. When you cross the | |
| 432 boundary of a replacement region (usually designated via a @samp{$} sign), | |
| 433 it will automatically change to Insert state. You do not have to worry | |
| 434 about it. The key bindings remain practically the same as in Insert | |
| 435 state. If you type @key{ESC}, Viper will switch to Vi command mode, terminating the | |
| 436 replacement state.@refill | |
| 437 @end table | |
| 438 | |
| 439 @cindex mode line | |
| 440 | |
| 441 The modes are indicated on the @dfn{mode line} as <E>, <I>, <V>, and <R>, | |
| 442 so that the multiple modes do not confuse you. Most of your editing can be | |
| 443 done in Vi and Insert states. Viper will try to make all new buffers be in Vi | |
| 444 state, but sometimes they may come up in Emacs state. @kbd{C-z} | |
| 445 will take you to Vi state in such a case. In some major modes, like Dired, | |
| 446 Info, Gnus, etc., you should not switch to Vi state (and Viper will not | |
| 447 attempt to do so) because these modes are not intended for text editing and | |
| 448 many of the Vi keys have special meaning there. If you plan to read news, | |
| 449 browse directories, read mail, etc., from Emacs (which you should start | |
| 450 doing soon!), you should learn about the meaning of the various keys in | |
| 451 those special modes (typing @kbd{C-h m} in a buffer provides | |
| 452 help with key bindings for the major mode of that buffer). | |
| 453 | |
| 454 If you switch to Vi in Dired or similar modes---no harm is done. It is just | |
| 39267 | 455 that the special key bindings provided by those modes will be temporarily |
| 25829 | 456 overshadowed by Viper's bindings. Switching back to Viper's Emacs state |
| 457 will revive the environment provided by the current major mode. | |
| 458 | |
| 459 States in Viper are orthogonal to Emacs major modes, such as C mode or Dired | |
| 460 mode. You can turn Viper on and off for any Emacs state. When Viper is turned | |
| 461 on, Vi state can be used to move around. In Insert state, the bindings for | |
| 462 these modes can be accessed. For beginners (users at Viper levels 1 and 2), | |
| 463 these bindings are suppressed in Insert state, so that new users are not | |
| 464 confused by the Emacs states. Note that unless you allow Emacs bindings in | |
| 465 Insert state, you cannot do many interesting things, like language | |
| 466 sensitive editing. For the novice user (at Viper level 1), all major mode | |
| 467 bindings are turned off in Vi state as well. This includes the bindings for | |
| 468 key sequences that start with @kbd{C-c}, which practically means that all | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
469 major mode bindings are unsupported. @xref{Customization}, to find out how |
| 25829 | 470 to allow Emacs keys in Insert state. |
| 471 | |
| 472 @menu | |
| 473 * Emacs State:: This is the state you should learn more about when | |
| 474 you get up to speed with Viper. | |
| 475 * Vi State:: Vi commands are executed in this state. | |
| 476 * Insert State:: You can enter text, and also can do sophisticated | |
| 477 editing if you know enough Emacs commands. | |
| 478 * Replace State:: Like Insert mode, but it is invoked via the | |
| 479 replacement commands, such as cw, C, R, etc. | |
| 480 @end menu | |
| 481 | |
| 482 @node Emacs State, Vi State, States in Viper, States in Viper | |
| 483 @subsection Emacs State | |
| 484 | |
| 485 @kindex @kbd{C-z} | |
| 486 @cindex Emacs state | |
| 487 | |
| 488 | |
| 489 You will be in this mode only by accident (hopefully). This is the state | |
| 490 Emacs is normally in (imagine!!). Now leave it as soon as possible by | |
| 491 typing @kbd{C-z}. Then you will be in Vi state (sigh of relief) :-). | |
| 492 | |
| 493 Emacs state is actually a Viperism to denote all the major and minor modes | |
| 494 (@pxref{Emacs Preliminaries}) other than Viper that Emacs can be in. Emacs | |
| 495 can have several modes, such as C mode for editing C programs, LaTeX mode | |
| 496 for editing LaTeX documents, Dired for directory editing, etc. These are | |
| 497 major modes, each with a different set of key-bindings. Viper states are | |
| 498 orthogonal to these Emacs major modes. The presence of these language | |
| 499 sensitive and other modes is a major win over Vi. @xref{Improvements over | |
| 500 Vi}, for more.@refill | |
| 501 | |
| 502 The bindings for these modes can be made available in the Viper Insert state | |
| 503 as well as in Emacs state. Unless you specify your user level as 1 (a | |
| 504 novice), all major mode key sequences that start with @kbd{C-x} and | |
| 505 @kbd{C-c} are also available in Vi state. This is important because major | |
| 506 modes designed for editing files, such as cc-mode or latex-mode, use key | |
| 507 sequences that begin with @kbd{C-x} and @kbd{C-c}. | |
| 508 | |
| 509 There is also a key that lets you temporarily escape to Vi command state | |
| 510 from Emacs or Insert states: typing @kbd{C-c \} will let you execute a | |
| 511 single Vi command while staying in Viper's Emacs or Insert state. | |
| 512 In Insert state, the same can also be achieved by typing @kbd{C-z}. | |
| 513 | |
| 514 | |
| 515 @node Vi State, Insert State, Emacs State, States in Viper | |
| 516 @subsection Vi State | |
| 517 | |
| 518 @cindex Vi state | |
| 519 | |
| 520 This is the Vi command mode. When Viper is in Vi state, you will see the sign | |
| 521 <V> in the mode line. Most keys will work as in Vi. The notable | |
| 522 exceptions are: | |
| 523 | |
| 524 @table @kbd | |
| 525 @item C-x | |
| 526 @kindex @kbd{C-x} | |
| 527 @kbd{C-x} is used to invoke Emacs commands, mainly those that do window | |
| 528 management. @kbd{C-x 2} will split a window, @kbd{C-x 0} will close a | |
| 529 window. @kbd{C-x 1} will close all other windows. @kbd{C-xb} is used to | |
| 530 switch buffers in a window, and @kbd{C-xo} to move through windows. | |
| 531 These are about the only necessary keystrokes. | |
| 532 For the rest, see the GNU Emacs Manual. | |
| 533 | |
| 534 @item C-c | |
| 535 @kindex @kbd{C-c} | |
| 536 For user levels 2 and higher, this key serves as a prefix key for the key | |
| 537 sequences used by various major modes. For users at Viper level 1, @kbd{C-c} | |
| 538 simply beeps. | |
| 539 | |
| 540 @item C-g and C-] | |
| 541 @kindex @kbd{C-g} | |
| 542 @kindex @kbd{C-]} | |
| 543 | |
| 544 These are the Emacs @samp{quit} keys. | |
| 545 There will be cases where you will have to | |
| 546 use @kbd{C-g} to quit. Similarly, @kbd{C-]} is used to exit | |
| 547 @samp{Recursive Edits} in Emacs for which there is no comparable Vi | |
| 548 functionality and no key-binding. Recursive edits are indicated by | |
| 549 @samp{[]} brackets framing the modes on the mode line. | |
| 550 @xref{Recursive Edit,Recursive | |
| 551 Edit,Recursive Edit,emacs,The GNU Emacs Manual}. | |
| 552 At user level 1, @kbd{C-g} is bound to @code{viper-info-on-file} | |
| 553 function instead. | |
| 554 @refill | |
| 555 @item C-\ | |
| 556 @kindex @kbd{C-\} | |
| 557 @cindex Meta key | |
| 558 | |
| 559 Viper uses @key{ESC} as a switch between Insert and Vi states. Emacs uses | |
| 560 @key{ESC} for Meta. The Meta key is very important in Emacs since many | |
|
36043
5d6b76d28b83
2001-02-12 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
35411
diff
changeset
|
561 functions are accessible only via that key as @kbd{M-x function-name}. |
| 25829 | 562 Therefore, we need to simulate it somehow. In Viper's Vi, Insert, and |
| 563 Replace states, the meta key is set to be @kbd{C-\}. Thus, to get | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
564 @kbd{M-x}, you should type @kbd{C-\ x} (if the keyboard has no Meta key, |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
565 which is rare these days). |
| 25829 | 566 This works both in the Vi command state and in the Insert and Replace |
| 567 states. In Vi command state, you can also use @kbd{\ @key{ESC}} as the | |
| 568 meta key. | |
| 569 | |
| 570 Note: Emacs binds @kbd{C-\} to a function that offers to change the | |
| 571 keyboard input method in the multilingual environment. Viper overrides this | |
| 572 binding. However, it is still possible to switch the input method by typing | |
| 573 @kbd{\ C-\} in the Vi command state and @kbd{C-z \ C-\} in the Insert state. | |
| 574 Or you can use the MULE menu in the menubar. | |
| 575 @end table | |
| 576 @noindent | |
| 577 Other differences are mostly improvements. The ones you should know | |
| 578 about are: | |
| 579 | |
| 580 @table @samp | |
| 581 @item Undo | |
| 582 @kindex @kbd{u} | |
| 583 @kbd{u} will undo. Undo can be repeated by the @kbd{.} key. Undo itself | |
| 584 can be undone. Another @kbd{u} will change the direction. The presence | |
| 585 of repeatable undo means that @kbd{U}, undoing lines, is not very | |
| 586 important. Therefore, @kbd{U} also calls @code{viper-undo}. | |
| 587 @cindex multiple undo | |
| 588 @cindex undo | |
| 589 | |
| 590 | |
| 591 @item Counts | |
| 592 Most commands, @kbd{~}, @kbd{[[}, @kbd{p}, @kbd{/}, @dots{}, etc., take counts. | |
| 593 | |
| 594 @comment ]] Just to balance parens | |
| 595 @item Regexps | |
| 596 Viper uses Emacs Regular Expressions for searches. These are a superset of | |
| 597 Vi regular | |
| 598 expressions, excepting the change-of-case escapes @samp{\u}, @samp{\L}, | |
|
50475
b65aa1d740eb
Fix cross references.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
599 @dots{}, etc. @xref{Regexps,,Syntax of Regular Expressions,emacs,The |
| 25829 | 600 GNU Emacs Manual}, for details. |
| 601 Files specified to @kbd{:e} use @code{csh} regular expressions | |
| 602 (globbing, wildcards, what have you). | |
| 603 However, the function @code{viper-toggle-search-style}, bound to @kbd{C-c /}, | |
| 604 lets the user switch from search with regular expressions to plain vanilla | |
| 605 search and vice versa. It also lets one switch from case-sensitive search | |
| 606 to case-insensitive and back. | |
| 607 @xref{Viper Specials}, for more details. | |
| 608 @cindex regular expressions | |
| 609 @cindex vanilla search | |
| 610 @cindex case-sensitive search | |
| 611 @cindex case-insensitive search | |
| 612 @kindex @kbd{C-c /} | |
| 613 | |
| 614 @item Ex commands | |
| 615 @cindex Ex commands | |
| 616 The current working directory of a buffer is automatically inserted in the | |
| 617 minibuffer if you type @kbd{:e} then space. Absolute filenames are | |
|
38866
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
618 required less often in Viper. For file names, Emacs uses a convention that |
|
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
619 is slightly different from other programs. It is designed to minimize the |
|
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
620 need for deleting file names that Emacs provides in its prompts. (This is |
|
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
621 usually convenient, but occasionally the prompt may suggest a wrong file |
| 25829 | 622 name for you.) If you see a prompt @kbd{/usr/foo/} and you wish to edit the |
| 623 file @kbd{~/.viper}, you don't have to erase the prompt. Instead, simply | |
| 624 continue typing what you need. Emacs will interpret @kbd{/usr/foo/~/.viper} | |
| 625 correctly. Similarly, if the prompt is @kbd{~/foo/} and you need to get to | |
| 626 @kbd{/bar/file}, keep typing. Emacs interprets @kbd{~/foo//bar/} as | |
| 627 @kbd{/bar/file}, since when it sees @samp{//}, it understands that | |
| 628 @kbd{~/foo/} is to be discarded. | |
| 629 | |
| 630 The command @kbd{:cd} will change the default directory for the | |
| 631 current buffer. The command @kbd{:e} will interpret the | |
| 632 filename argument in @code{csh}. @xref{Customization}, if you | |
| 633 want to change the default shell. | |
| 634 The command @kbd{:next} takes counts from | |
| 635 @kbd{:args}, so that @kbd{:rew} is obsolete. Also, @kbd{:args} will show only | |
| 636 the invisible files (i.e., those that are not currently seen in Emacs | |
| 637 windows). | |
| 638 | |
| 639 When applicable, Ex commands support file completion and history. This | |
| 640 means that by typing a partial file name and then @key{TAB}, Emacs will try | |
| 641 to complete the name or it will offer a menu of possible completions. | |
| 642 This works similarly to Tcsh and extends the behavior of Csh. While Emacs | |
| 643 is waiting for a file name, you can type @kbd{M-p} to get the previous file | |
| 644 name you typed. Repeatedly typing @kbd{M-p} and @kbd{M-n} will let you | |
| 645 browse through the file history. | |
| 646 | |
| 647 Like file names, partially typed Ex commands can be completed by typing | |
| 648 @key{TAB}, and Viper keeps the history of Ex commands. After typing | |
| 649 @kbd{:}, you can browse through the previously entered Ex commands by | |
| 650 typing @kbd{M-p} and @kbd{M-n}. Viper tries to rationalize when it puts Ex | |
| 651 commands on the history list. For instance, if you typed @kbd{:w!@: foo}, | |
| 652 only @kbd{:w!} will be placed on the history list. This is because the | |
| 653 last history element is the default that can be invoked simply by typing | |
| 654 @kbd{: @key{RET}}. If @kbd{:w!@: foo} were placed on the list, it would be all to | |
| 655 easy to override valuable data in another file. Reconstructing the full | |
| 656 command, @kbd{:w!@: foo}, from the history is still not that hard, since Viper | |
| 657 has a separate history for file names. By typing @kbd{: M-p}, you will get | |
| 658 @kbd{:w!} in the Minibuffer. Then, repeated @kbd{M-p} will get you through | |
| 659 the file history, inserting one file name after another. | |
| 660 | |
| 661 In contrast to @kbd{:w!@: foo}, if the command were @kbd{:r foo}, the entire | |
| 662 command will appear in the history list. This is because having @kbd{:r} | |
| 663 alone as a default is meaningless, since this command requires a file | |
| 664 argument. | |
| 665 @refill | |
| 666 @end table | |
| 667 @noindent | |
| 668 As Vi, Viper's destructive commands can be re-executed by typing `@kbd{.}'. | |
| 669 However, in addition, Viper keeps track of the history of such commands. This | |
| 670 history can be perused by typing @kbd{C-c M-p} and @kbd{C-c M-n}. | |
| 671 Having found the appropriate command, it can be then executed by typing | |
| 672 `@kbd{.}'. | |
| 673 @xref{Improvements over Vi}, for more information. | |
| 674 | |
| 675 @node Insert State, Replace State, Vi State, States in Viper | |
| 676 @subsection Insert State | |
| 677 | |
| 678 @cindex Insert state | |
| 679 | |
| 680 To avoid confusing the beginner (at Viper level 1 and 2), Viper makes only the | |
| 681 standard Vi keys available in Insert state. The implication is that | |
|
36043
5d6b76d28b83
2001-02-12 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
35411
diff
changeset
|
682 Emacs major modes cannot be used in Insert state. |
| 25829 | 683 It is strongly recommended that as soon as you are comfortable, make the |
| 684 Emacs state bindings visible (by changing your user level to 3 or higher). | |
| 685 @xref{Customization}, | |
| 686 to see how to do this.@refill | |
| 687 | |
| 688 Once this is done, it is possible to do quite a bit of editing in | |
| 689 Insert state. For instance, Emacs has a @dfn{yank} command, @kbd{C-y}, | |
| 690 which is similar to Vi's @kbd{p}. However, unlike @kbd{p}, @kbd{C-y} can be | |
| 691 used in Insert state of Viper. Emacs also has a kill ring where it keeps | |
| 692 pieces of text you deleted while editing buffers. The command @kbd{M-y} is | |
| 693 used to delete the text previously put back by Emacs' @kbd{C-y} or by Vi's | |
| 694 @kbd{p} command and reinsert text that was placed on the kill-ring earlier. | |
| 695 | |
| 696 This works both in Vi and Insert states. | |
| 697 In Vi state, @kbd{M-y} is a much better alternative to the usual Vi's way | |
| 698 of recovering the 10 previously deleted chunks of text. In Insert state, | |
| 699 you can | |
| 700 use this as follows. Suppose you deleted a piece of text and now you need | |
| 701 to re-insert it while editing in Insert mode. The key @kbd{C-y} will put | |
| 702 back the most recently deleted chunk. If this is not what you want, type | |
| 703 @kbd{M-y} repeatedly and, hopefully, you will find the chunk you want. | |
| 704 | |
| 705 Finally, in Insert and Replace states, Viper provides the history of | |
| 706 pieces of text inserted in previous insert or replace commands. These | |
| 707 strings of text can be recovered by repeatedly typing @kbd{C-c M-p} or | |
| 708 @kbd{C-c M-n} while in Insert or Replace state. (This feature is disabled | |
| 709 in the minibuffer: the above keys are usually bound to other histories, | |
| 710 which are more appropriate in the minibuffer.) | |
| 711 | |
| 712 | |
| 713 @cindex Meta key | |
| 714 | |
| 715 You can call Meta functions from Insert state. As in Vi state, the Meta key | |
| 716 is @kbd{C-\}. Thus @kbd{M-x} is typed as @kbd{C-\ x}. | |
| 717 | |
| 718 Other Emacs commands that are useful in Insert state are @kbd{C-e} | |
| 719 and @kbd{C-a}, which move the cursor to the end and the beginning of the | |
| 720 current line, respectively. You can also use @kbd{M-f} and @kbd{M-b}, | |
| 721 which move the cursor forward (or backward) one word. | |
| 722 If your display has a Meta key, these functions are invoked by holding the | |
| 723 Meta key and then typing @kbd{f} and @kbd{b}, respectively. On displays | |
| 724 without the Meta key, these functions are invoked by typing | |
| 725 @kbd{C-\ f} and @kbd{C-\ b} (@kbd{C-\} simulates the Meta key in Insert | |
| 726 state, as explained above). | |
| 727 | |
| 728 The key @kbd{C-z} is sometimes also useful in Insert state: it allows you | |
| 729 to execute a single command in Vi state without leaving the Insert state! | |
| 730 For instance, @kbd{C-z d2w} will delete the next two words without leaving | |
| 731 the Insert state. | |
| 732 | |
| 733 When Viper is in Insert state, you will see <I> in the mode line. | |
| 734 | |
| 735 @node Replace State,, Insert State, States in Viper | |
| 736 @subsection Replace State | |
| 737 | |
| 738 @cindex Replace state | |
| 739 | |
| 740 This state is entered through Vi replacement commands, such as @kbd{C}, | |
| 741 @kbd{cw}, etc., or by typing @kbd{R}. In Replace state, Viper puts <R> in | |
| 742 the mode line to let you know which state is in effect. If Replace state is | |
| 743 entered through @kbd{R}, Viper stays in that state until the user hits | |
| 744 @key{ESC}. If this state is entered via the other replacement commands, | |
| 745 then Replace state is in effect until you hit @key{ESC} or until you cross | |
| 746 the rightmost boundary of the replacement region. In the latter case, Viper | |
| 747 changes its state from Replace to Insert (which you will notice by the | |
| 748 change in the mode line). | |
| 749 | |
| 750 Since Viper runs under Emacs, it is possible to switch between buffers | |
| 751 while in Replace state. You can also move the cursor using the arrow keys | |
| 752 (even on dumb terminals!)@: and the mouse. Because of this freedom (which is | |
| 753 unattainable in regular Vi), it is possible to take the cursor outside the | |
| 754 replacement region. (This may be necessary for several reasons, including | |
| 755 the need to enable text selection and region-setting with the mouse.) | |
| 756 | |
| 757 The issue then arises as to what to do when the user | |
| 758 hits the @key{ESC} key. In Vi, this would cause the text between cursor and | |
| 759 the end of the replacement region to be deleted. But what if, as is | |
| 760 possible in Viper, the cursor is not inside the replacement region? | |
| 761 | |
| 762 To solve the problem, Viper keeps track of the last cursor position while it | |
| 763 was still inside the replacement region. So, in the above situation, Viper | |
| 764 would delete text between this position and the end of the replacement | |
| 765 region. | |
| 766 | |
| 767 @node The Minibuffer,Multiple Files in Viper, States in Viper, Overview | |
| 768 @section The Minibuffer | |
| 769 | |
| 770 @cindex Minibuffer | |
| 771 | |
| 772 The Minibuffer is where commands are entered in. Editing can be done | |
| 773 by commands from Insert state, namely: | |
| 774 | |
| 775 @table @kbd | |
| 776 @item C-h | |
| 777 Backspace | |
| 778 @item C-w | |
| 779 Delete Word | |
| 780 @item C-u | |
| 781 Erase line | |
| 782 @item C-v | |
| 783 Quote the following character | |
| 784 @item @key{RET} | |
| 785 Execute command | |
| 786 @item C-g and C-] | |
| 787 Emacs quit and abort keys. These may be necessary. @xref{Vi State}, for an | |
| 788 explanation. | |
| 789 @item M-p and M-n | |
| 790 These keys are bound to functions that peruse minibuffer history. The | |
| 791 precise history to be perused depends on the context. It may be the history | |
| 792 of search strings, Ex commands, file names, etc. | |
| 793 @end table | |
| 794 | |
| 795 Most of the Emacs keys are functional in the Minibuffer. While in the | |
| 796 Minibuffer, Viper tries to make editing resemble Vi's behavior when the | |
| 797 latter is waiting for the user to type an Ex command. In particular, you | |
| 798 can use the regular Vi commands to edit the Minibuffer. You can switch | |
| 799 between the Vi state and Insert state at will, and even use the replace mode. | |
| 800 Initially, the Minibuffer comes up in Insert state. | |
| 801 | |
| 802 Some users prefer plain Emacs bindings in the Minibuffer. To this end, set | |
| 803 @code{viper-vi-style-in-minibuffer} to @code{nil} in @file{.viper}. | |
| 804 @xref{Customization}, to learn how to do this. | |
| 805 | |
| 806 When the Minibuffer changes Viper states, you will notice that the appearance | |
| 807 of the text there changes as well. This is useful because the Minibuffer | |
| 808 has no mode line to tell which Vi state it is in. | |
| 809 The appearance of the text in the Minibuffer can be changed. | |
| 810 @xref{Viper Specials}, for more details. | |
| 811 | |
| 812 @node Multiple Files in Viper,Unimplemented Features,The Minibuffer,Overview | |
| 813 @section Multiple Files in Viper | |
| 814 | |
| 815 @cindex multiple files | |
| 816 @cindex managing multiple files | |
| 817 | |
| 818 Viper can edit multiple files. This means, for example that you never need | |
| 819 to suffer through @code{No write since last change} errors. | |
| 820 Some Viper elements are common over all the files. | |
| 821 | |
| 822 @table @samp | |
| 823 @item Textmarkers | |
| 824 @cindex markers | |
| 825 @cindex textmarkers | |
| 826 Textmarkers remember @emph{files and positions}. | |
| 827 If you set marker @samp{a} in | |
| 828 file @file{foo}, start editing file @file{bar} and type @kbd{'a}, then | |
| 829 @emph{YOU WILL SWITCH TO FILE @file{foo}}. You can see the contents of a | |
| 830 textmarker using the Viper command @kbd{[<a-z>} where <a-z> are the | |
| 831 textmarkers, e.g., @kbd{[a} to view marker @samp{a} .@refill | |
| 832 @item Repeated Commands | |
| 833 Command repetitions are common over files. Typing @kbd{!!} will repeat the | |
| 834 last @kbd{!} command whichever file it was issued from. | |
| 835 Typing @kbd{.} will repeat the last command from any file, and | |
| 836 searches will repeat the last search. Ex commands can be repeated by typing | |
| 837 @kbd{: @key{RET}}.@refill | |
| 838 Note: in some rare cases, that @kbd{: @key{RET}} may do something dangerous. | |
| 839 However, usually its effect can be undone by typing @kbd{u}. | |
| 840 @item Registers | |
| 841 @cindex registers | |
| 842 Registers are common to files. Also, text yanked with @kbd{y} can be | |
| 843 put back (@kbd{p}) into any file. The Viper command @kbd{]<a-z>}, where <a-z> are | |
| 844 the registers, can be used to look at the contents of a register, e.g., | |
| 845 type @kbd{]a} to view register @samp{a}. | |
| 846 | |
| 847 There is one difference in text deletion that you should be | |
| 848 aware of. This difference comes from Emacs and was adopted in Viper | |
| 849 because we find it very useful. In Vi, if you delete a line, say, and then | |
| 850 another line, these two deletions are separated and are put back | |
| 851 separately if you use the @samp{p} command. In Emacs (and Viper), successive | |
| 852 series of deletions that are @emph{not interrupted} by other commands are | |
| 853 lumped together, so the deleted text gets accumulated and can be put back | |
| 854 as one chunk. If you want to break a sequence of deletions so that the | |
| 855 newly deleted text could be put back separately from the previously deleted | |
| 856 text, you should perform a non-deleting action, e.g., move the cursor one | |
| 857 character in any direction. | |
| 858 @item Absolute Filenames | |
|
38866
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
859 @cindex absolute file names |
| 25829 | 860 The current directory name for a file is automatically prepended to the |
| 861 file name in any | |
| 862 @kbd{:e}, @kbd{:r}, @kbd{:w}, etc., command (in Emacs, each buffer has a | |
| 863 current directory). | |
| 864 This directory is inserted in the Minibuffer once you type space after | |
| 865 @kbd{:e, r}, etc. Viper also supports completion of file names and Ex | |
| 866 commands (@key{TAB}), and it keeps track of | |
| 867 command and file history (@kbd{M-p}, @kbd{M-n}). | |
| 868 Absolute filenames are required less | |
| 869 often in Viper. | |
| 870 | |
| 871 You should be aware that Emacs interprets @kbd{/foo/bar//bla} as | |
| 872 @kbd{/bla} and @kbd{/foo/~/bar} as @kbd{~/bar}. This is designed to | |
|
38866
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
873 minimize the need for erasing file names that Emacs suggests in its |
|
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
874 prompts, if a suggested file name is not what you wanted. |
| 25829 | 875 |
| 876 The command @kbd{:cd} will change the default directory for the | |
| 877 current Emacs buffer. The Ex command @kbd{:e} will interpret the | |
| 878 filename argument in @samp{csh}, by default. @xref{Customization}, if you | |
| 879 want to change this. | |
| 880 @end table | |
| 881 | |
| 882 @noindent | |
| 883 Currently undisplayed files can be listed using the @kbd{:ar} command. The | |
| 884 command @kbd{:n} can be given counts from the @kbd{:ar} list to switch to | |
|
42638
bdf1f3b7fc54
small clarification
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42602
diff
changeset
|
885 other files. For example, use `:n3' to move to the third file in that list. |
| 25829 | 886 |
| 887 @node Unimplemented Features,,Multiple Files in Viper,Overview | |
| 888 @section Unimplemented Features | |
| 889 | |
| 890 Unimplemented features include: | |
| 891 | |
| 892 @itemize @bullet | |
| 893 @item | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
894 @kbd{:ab} and @kbd{:una} are not implemented, since |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
895 @kbd{:ab} is considered obsolete, since Emacs has much |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
896 more powerful facilities for defining abbreviations. |
| 25829 | 897 @item |
| 898 @kbd{:set option?} is not implemented. The current | |
| 899 @kbd{:set} can also be used to set Emacs variables. | |
| 900 @item | |
| 901 @kbd{:se list} requires modification of the display code for Emacs, so | |
| 902 it is not implemented. | |
| 903 A useful alternative is @code{cat -t -e file}. Unfortunately, it cannot | |
| 904 be used directly inside Emacs, since Emacs will obdurately change @samp{^I} | |
| 905 back to normal tabs.@refill | |
| 906 @end itemize | |
| 907 | |
| 908 @comment node-name, next, previous, up | |
| 909 @node Improvements over Vi, Customization, Overview, Top | |
| 910 @chapter Improvements over Vi | |
| 911 | |
| 912 Some common problems with Vi and Ex have been solved in Viper. This | |
| 913 includes better implementation of existing commands, new commands, and | |
| 914 the facilities provided by Emacs. | |
| 915 | |
| 916 @menu | |
| 917 * Basics:: Basic Viper differences, Multi-file effects. | |
| 918 * Undo and Backups:: Multiple undo, auto-save, backups and changes | |
| 919 * History:: History for Ex and Vi commands. | |
| 920 * Macros and Registers:: Keyboard Macros (extended ".")@: @@reg execution. | |
| 921 * Completion:: Filename and Command Completion for Ex. | |
| 922 * Improved Search:: Incremental Search and Buffer Content Search. | |
| 923 * Abbreviation Facilities:: Normal Abbrevs, Templates, and Dynamic Abbrevs. | |
| 924 * Movement and Markers:: Screen Editor movements, viewing textmarkers. | |
| 925 * New Commands:: Commands that do not exist in Vi. | |
| 926 * Useful Packages:: A Sampling of some Emacs packages, and things | |
| 927 you should know about. | |
| 928 @end menu | |
| 929 | |
| 930 @node Basics, Undo and Backups, Improvements over Vi, Improvements over Vi | |
| 931 @section Basics | |
| 932 | |
| 933 The Vi command set is based on the idea of combining motion commands | |
| 934 with other commands. The motion command is used as a text region | |
| 935 specifier for other commands. | |
| 936 We classify motion commands into @dfn{point commands} and | |
| 937 @dfn{line commands}.@refill | |
| 938 | |
| 939 @cindex point commands | |
| 940 | |
| 941 The point commands are: | |
| 942 | |
| 943 @quotation | |
| 944 @kbd{h}, @kbd{l}, @kbd{0}, @kbd{$}, @kbd{w}, @kbd{W}, @kbd{b}, @kbd{B}, | |
| 945 @kbd{e}, @kbd{E}, @kbd{(}, @kbd{)}, @kbd{/}, @kbd{?}, @kbd{`}, @kbd{f}, | |
| 946 @kbd{F}, @kbd{t}, @kbd{T}, @kbd{%}, @kbd{;}, @kbd{,}, @kbd{^} | |
| 947 @end quotation | |
| 948 | |
| 949 @cindex line commands | |
| 950 | |
| 951 The line commands are: | |
| 952 | |
| 953 @quotation | |
| 954 @kbd{j}, @kbd{k}, @kbd{+}, @kbd{-}, @kbd{H}, @kbd{M}, @kbd{L}, @kbd{@{}, | |
| 955 @kbd{@}}, @kbd{G}, @kbd{'}, @kbd{[[}, @kbd{]]}, @kbd{[]} | |
| 956 @end quotation | |
| 957 | |
| 958 @cindex region | |
| 959 @cindex region specification | |
| 960 @cindex expanding (region) | |
| 961 @cindex describing regions | |
| 962 @cindex movement commands | |
| 963 | |
| 964 @noindent | |
| 965 If a point command is given as an argument to a modifying command, the | |
| 966 region determined by the point command will be affected by the modifying | |
| 967 command. On the other hand, if a line command is given as an argument to a | |
| 968 modifying command, the region determined by the line command will be | |
| 969 enlarged so that it will become the smallest region properly containing the | |
| 970 region and consisting of whole lines (we call this process @dfn{expanding | |
| 971 the region}), and then the enlarged region will be affected by the modifying | |
| 972 command. | |
| 973 Text Deletion Commands (@pxref{Deleting Text}), Change commands | |
| 974 (@pxref{Changing Text}), even Shell Commands (@pxref{Shell Commands}) | |
| 975 use these commands to describe a region of text to operate on. | |
| 976 Thus, type @kbd{dw} to delete a word, @kbd{>@}} to shift a paragraph, or | |
| 977 @kbd{!'afmt} to format a region from @samp{point} to textmarker | |
| 978 @samp{a}. | |
| 979 | |
| 980 @cindex r and R region specifiers | |
| 981 | |
| 982 Viper adds the region specifiers @samp{r} and @samp{R}. Emacs has a | |
| 983 special marker called @dfn{mark}. The text-area between the current cursor | |
| 984 position @dfn{point} and the @dfn{mark} is called the @dfn{region}. | |
| 985 @samp{r} specifies the raw region and @samp{R} is the expanded region | |
| 986 (i.e., the minimal contiguous chunk of full lines that contains the raw | |
| 987 region). | |
| 988 @kbd{dr} will now delete the region, @kbd{>r} will shift it, etc. | |
| 989 @kbd{r,R} are not motion commands, however. The special mark is set by | |
| 990 @kbd{m.} and other commands. @xref{Marking}, for more info. | |
| 991 | |
| 992 Viper also adds counts to most commands for which it would make sense. | |
| 993 | |
| 994 In the Overview chapter, some Multiple File issues were discussed | |
| 995 (@pxref{Multiple Files in Viper}). In addition to the files, Emacs has | |
| 996 buffers. These can be seen in the @kbd{:args} list and switched using | |
| 997 @kbd{:next} if you type @kbd{:set ex-cycle-through-non-files t}, or | |
| 998 specify @code{(setq ex-cycle-through-non-files t)} in your @file{.viper} | |
| 999 file. @xref{Customization}, for details. | |
| 1000 | |
| 1001 @node Undo and Backups, History, Basics, Improvements over Vi | |
| 1002 @section Undo and Backups | |
| 1003 | |
| 1004 @cindex undo | |
| 1005 | |
| 1006 Viper provides multiple undo. The number of undo's and the size is limited | |
| 1007 by the machine. The Viper command @kbd{u} does an undo. Undo can be | |
| 1008 repeated by typing @kbd{.} (a period). Another @kbd{u} will undo the undo, | |
| 1009 and further | |
| 1010 @kbd{.} will repeat it. Typing @kbd{u} does the first undo, and changes the | |
| 1011 direction. | |
| 1012 | |
| 1013 @cindex backup files | |
| 1014 @cindex auto save | |
| 1015 | |
| 1016 Since the undo size is limited, Viper can create backup files and | |
| 1017 auto-save files. It will normally do this automatically. It is possible | |
| 1018 to have numbered backups, etc. For details, @pxref{Backup,,Backup and | |
| 1019 Auto-Save,emacs,The GNU Emacs Manual} @refill | |
| 1020 | |
| 1021 @comment [ balance parens | |
| 1022 @cindex viewing registers and markers | |
| 1023 @cindex registers | |
| 1024 @cindex markers | |
| 1025 @cindex textmarkers | |
| 1026 | |
| 1027 The results of the 9 previous changes are available in the 9 numeric | |
| 1028 registers, as in Vi. The extra goody is the ability to @emph{view} these | |
| 1029 registers, in addition to being able to access them through @kbd{p} and | |
| 1030 @kbd{M-y} (@xref{Insert State}, for details.) | |
| 1031 The Viper command @kbd{] register} will display the contents of any | |
| 1032 register, numeric or alphabetical. The related command @kbd{[ textmarker} | |
| 1033 will show the text around the textmarker. @samp{register} and @samp{textmarker} | |
| 1034 can be any letters from a through z. | |
| 1035 @comment ] balance parens | |
| 1036 | |
| 1037 @node History, Macros and Registers, Undo and Backups,Improvements over Vi | |
| 1038 @section History | |
| 1039 | |
| 1040 @cindex history | |
| 1041 @cindex Minibuffer | |
| 1042 | |
| 1043 History is provided for Ex commands, Vi searches, file names, pieces of | |
| 1044 text inserted in earlier commands that use Insert or Replace state, and for | |
| 1045 destructive commands in Vi state. These are | |
| 1046 useful for fixing those small typos that screw up searches and @kbd{:s}, | |
| 1047 and for eliminating routine associated with repeated typing of file names | |
| 1048 or pieces of text that need to be inserted frequently. | |
| 1049 At the @kbd{:} or @kbd{/} prompts in the Minibuffer, you can do the following: | |
| 1050 | |
| 1051 @table @kbd | |
| 1052 @item M-p and M-n | |
| 1053 To move to previous and next history items. This causes the history | |
| 1054 items to appear on the command line, where you can edit them, or | |
| 1055 simply type Return to execute. | |
| 1056 @item M-r and M-s | |
| 1057 To search backward and forward through the history. | |
| 1058 @item @key{RET} | |
| 1059 Type @key{RET} to accept a default (which is displayed in the prompt). | |
| 1060 @end table | |
| 1061 | |
| 1062 The history of insertions can be perused by | |
| 1063 typing @kbd{C-c M-p} and @kbd{C-c M-n} while in Insert or Replace state. | |
| 1064 The history of destructive Vi commands can be perused via the same keys | |
| 1065 when Viper is in Vi state. @xref{Viper Specials}, for details. | |
| 1066 | |
| 1067 All Ex commands have a file history. For instance, typing @kbd{:e}, space | |
| 1068 and then @kbd{M-p} will bring up the name of the previously typed file | |
| 1069 name. Repeatedly typing @kbd{M-p}, @kbd{M-n}, etc., will let you browse | |
| 1070 through the file history. | |
| 1071 | |
| 1072 Similarly, commands that have to do with switching buffers | |
| 1073 have a buffer history, and commands that expect strings or regular | |
| 1074 expressions keep a history on those items. | |
| 1075 | |
| 1076 @node Macros and Registers,Completion,History,Improvements over Vi | |
| 1077 @section Macros and Registers | |
| 1078 | |
| 1079 @cindex keyboard macros | |
| 1080 @cindex macros | |
| 1081 @cindex registers | |
| 1082 @cindex register execution | |
| 1083 | |
| 1084 Viper facilitates the use of Emacs-style keyboard macros. @kbd{@@#} will | |
| 1085 start a macro definition. As you type, the commands will be executed, and | |
| 1086 remembered (This is called ``learn mode'' in some editors.) | |
| 1087 @kbd{@@register} will complete the macro, putting it into @samp{register}, | |
| 1088 where @samp{register} is any character from @samp{a} through @samp{z}. Then | |
| 1089 you can execute this macro using @kbd{@@register}. It is, of course, | |
| 1090 possible to yank some text into a register and execute it using | |
| 1091 @kbd{@@register}. Typing @kbd{@@@@}, @kbd{@@RET}, or @kbd{@@C-j} will | |
| 1092 execute the last macro that was executed using @kbd{@@register}.@refill | |
| 1093 | |
| 1094 Viper will automatically lowercase the register, so that pressing the | |
| 1095 @kbd{SHIFT} key for @kbd{@@} will not create problems. This is for | |
| 1096 @kbd{@@} macros and @kbd{"p} @emph{only}. In the case of @kbd{y}, | |
| 1097 @kbd{"Ayy} will append to @emph{register a}. For @kbd{[,],',`}, it | |
| 1098 is an error to use a Uppercase register name. | |
| 1099 | |
| 1100 @comment [ balance parens | |
| 1101 @cindex viewing registers and markers | |
| 1102 | |
| 1103 The contents of a register can be seen by @kbd{]register}. (@kbd{[textmarker} | |
| 1104 will show the contents of a textmarker). | |
| 1105 @comment ] balance parens | |
| 1106 | |
| 1107 @cindex last keyboard macro | |
| 1108 | |
| 1109 The last keyboard macro can also be executed using | |
| 1110 @kbd{*}, and it can be yanked into a register using @kbd{@@!register}. | |
| 1111 This is useful for Emacs style keyboard macros defined using @kbd{C-x(} | |
| 1112 and @kbd{C-x)}. Emacs keyboard macros have more capabilities. | |
| 1113 @xref{Keyboard Macros,,Keyboard Macros,emacs, The GNU Emacs Manual}, for | |
| 1114 details.@refill | |
| 1115 | |
| 1116 Keyboard Macros allow an interesting form of Query-Replace: | |
| 1117 @kbd{/pattern} or @kbd{n} to go to the next pattern (the query), followed by a | |
| 1118 Keyboard Macro execution @kbd{@@@@} (the replace). | |
| 1119 | |
| 1120 Viper also provides Vi-style macros. @xref{Vi Macros}, for details. | |
| 1121 | |
| 1122 | |
| 1123 @node Completion, Improved Search, Macros and Registers, Improvements over Vi | |
| 1124 @section Completion | |
| 1125 | |
| 1126 @cindex completion | |
| 1127 | |
| 1128 Completion is done when you type @key{TAB}. The Emacs completer does not | |
|
38866
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
1129 grok wildcards in file names. Once you type a wildcard, the completer will |
|
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
1130 no longer work for that file name. Remember that Emacs interprets a file name |
| 25829 | 1131 of the form @kbd{/foo//bar} as @kbd{/bar} and @kbd{/foo/~/bar} as |
| 1132 @kbd{~/bar}. | |
| 1133 | |
| 1134 @node Improved Search, Abbreviation Facilities, Completion, Improvements over Vi | |
| 1135 @section Improved Search | |
| 1136 | |
| 1137 @cindex buffer search | |
| 1138 @cindex word search | |
| 1139 | |
| 1140 Viper provides buffer search, the ability to search the buffer for a region | |
| 1141 under the cursor. You have to turn this on in @file{.viper} either by calling | |
| 1142 | |
| 1143 @example | |
| 1144 (viper-buffer-search-enable) | |
| 1145 @end example | |
| 1146 | |
| 1147 @noindent | |
| 1148 or by setting @code{viper-buffer-search-char} to, say, @kbd{f3}: | |
| 1149 @example | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1150 (setq viper-buffer-search-char ?g) |
| 25829 | 1151 @end example |
| 1152 | |
| 1153 @noindent | |
| 1154 If the user calls @code{viper-buffer-search-enable} explicitly (the first | |
| 1155 method), then @code{viper-buffer-search-char} will be set to @kbd{g}. | |
| 1156 Regardless of how this feature is enabled, the key | |
| 1157 @code{viper-buffer-search-char} will take movement commands, like | |
| 1158 @kbd{w,/,e}, to find a region and then search for the contents of that | |
| 1159 region. This command is very useful for searching for variable names, etc., | |
| 1160 in a program. The search can be repeated by @kbd{n} or reversed by @kbd{N}. | |
| 1161 | |
| 1162 @cindex incremental search | |
| 1163 | |
| 1164 Emacs provides incremental search. As you type the string in, the | |
| 1165 cursor will move to the next match. You can snarf words from the buffer | |
| 1166 as you go along. Incremental Search is normally bound to @kbd{C-s} and | |
| 1167 @kbd{C-r}. @xref{Customization}, to find out how to change the bindings | |
| 1168 of @kbd{C-r or C-s}. | |
| 1169 For details, @pxref{Incremental Search,,Incremental | |
| 1170 Search,emacs,The GNU Emacs Manual} @refill | |
| 1171 | |
| 1172 @cindex query replace | |
| 1173 | |
| 1174 Viper also provides a query replace function that prompts through the | |
| 1175 Minibuffer. It is invoked by the @kbd{Q} key in Vi state. | |
| 1176 | |
| 1177 @cindex mouse search | |
| 1178 | |
| 1179 On a window display, Viper supports mouse search, i.e., you can search for a | |
| 1180 word by clicking on it. @xref{Viper Specials}, for details. | |
| 1181 | |
| 1182 Finally, on a window display, Viper highlights search patterns as it finds | |
| 1183 them. This is done through what is known as @emph{faces} in Emacs. The | |
| 1184 variable that controls how search patterns are highlighted is | |
| 1185 @code{viper-search-face}. If you don't want any highlighting at all, put | |
| 1186 @example | |
| 1187 (copy-face 'default 'viper-search-face) | |
| 1188 @end example | |
| 1189 @vindex @code{viper-search-face} | |
| 1190 @noindent | |
| 1191 in @file{~/.viper}. If you want to change how patterns are highlighted, you | |
| 1192 will have to change @code{viper-search-face} to your liking. The easiest | |
| 1193 way to do this is to use Emacs customization widget, which is accessible | |
| 1194 from the menubar. Viper customization group is located under the | |
| 1195 @emph{Emulations} customization group, which in turn is under the | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1196 @emph{Editing} group (or simply by typing @kbd{:customize}). All Viper |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
1197 faces are grouped together under Viper's |
| 25829 | 1198 @emph{Highlighting} group. |
| 1199 | |
| 1200 Try it: it is really simple! | |
| 1201 | |
| 1202 @node Abbreviation Facilities,Movement and Markers,Improved Search,Improvements over Vi | |
| 1203 @section Abbreviation Facilities | |
| 1204 | |
| 1205 @cindex abbrevs | |
| 1206 | |
| 1207 It is possible in Emacs to define abbrevs based on the contents of the | |
| 1208 buffer. | |
| 1209 Sophisticated templates can be defined using the Emacs abbreviation | |
| 1210 facilities. @xref{Abbrevs,,Abbreviations,emacs,The GNU Emacs Manual}, for | |
| 1211 details. | |
| 1212 | |
| 1213 @cindex dynamic abbrevs | |
| 1214 | |
| 1215 Emacs also provides Dynamic Abbreviations. Given a partial word, Emacs | |
| 1216 will search the buffer to find an extension for this word. For instance, | |
| 1217 one can type @samp{Abbreviations} by typing @samp{A}, followed by a keystroke | |
| 1218 that completed the @samp{A} to @samp{Abbreviations}. Repeated typing | |
| 1219 will search further back in the buffer, so that one could get | |
| 1220 @samp{Abbrevs} by repeating the | |
| 1221 keystroke, which appears earlier in the text. Emacs binds this to | |
| 1222 @kbd{@key{ESC} /}, so you will have to find a key and bind the function | |
| 1223 @code{dabbrev-expand} to that key. | |
| 1224 Facilities like this make Vi's @kbd{:ab} command obsolete. | |
| 1225 | |
| 1226 @node Movement and Markers, New Commands, Abbreviation Facilities, Improvements over Vi | |
| 1227 @section Movement and Markers | |
| 1228 | |
| 1229 @cindex Ex style motion | |
| 1230 @cindex line editor motion | |
| 1231 | |
| 1232 Viper can be set free from the line--limited movements in Vi, such as @kbd{l} | |
| 1233 refusing to move beyond the line, @key{ESC} moving one character back, | |
| 1234 etc. These derive from Ex, which is a line editor. If your @file{.viper} | |
| 1235 contains | |
| 1236 | |
| 1237 @example | |
| 1238 @code{(setq viper-ex-style-motion nil)} | |
| 1239 @end example | |
| 1240 | |
| 1241 @noindent | |
| 1242 the motion will be a true screen editor motion. One thing you must then | |
| 1243 watch out for is that it is possible to be on the end-of-line character. | |
| 1244 The keys @kbd{x} and @kbd{%} will still work correctly, i.e., as if they | |
| 1245 were on the last character. | |
| 1246 | |
| 1247 @vindex @code{viper-syntax-preference} | |
| 1248 @cindex syntax table | |
| 1249 | |
| 1250 The word-movement commands @kbd{w}, @kbd{e}, etc., and the associated | |
| 1251 deletion/yanking commands, @kbd{dw}, @kbd{yw}, etc., can be made to | |
| 1252 understand Emacs syntax tables. If the variable | |
| 1253 @code{viper-syntax-preference} is set to @code{strict-vi} then | |
| 1254 the meaning of @emph{word} is the same as in | |
| 1255 Vi. However, if the value is @code{reformed-vi} (the default) then the | |
| 1256 alphanumeric symbols will be those specified by the current Emacs syntax | |
| 1257 table (which may be different for different major modes) plus the | |
| 1258 underscore symbol @kbd{_}, minus some non-word symbols, like '.;,|, etc. | |
| 1259 Both @code{strict-vi} and @code{reformed-vi} work close to Vi in | |
| 1260 traditional cases, but @code{reformed-vi} does a better job when editing | |
| 1261 text in non-Latin alphabets. | |
| 1262 | |
| 1263 The user can also specify the value @code{emacs}, which would | |
| 1264 make Viper use exactly the Emacs notion of word. In particular, the | |
| 1265 underscore may not be part of a word. Finally, if | |
| 1266 @code{viper-syntax-preference} is set to @code{extended}, Viper words would | |
| 1267 consist of characters that are classified as alphanumeric @emph{or} as | |
| 1268 parts of symbols. This is convenient for writing programs and in many other | |
| 1269 situations. | |
| 1270 | |
| 1271 @code{viper-syntax-preference} is a local variable, so it can have different | |
| 1272 values for different major modes. For instance, in programming modes it can | |
| 1273 have the value @code{extended}. In text modes where words contain special | |
| 1274 characters, such as European (non-English) letters, Cyrillic letters, etc., | |
| 1275 the value can be @code{reformed-vi} or @code{emacs}. | |
| 1276 | |
| 1277 Changes to @code{viper-syntax-preference} should be done in the hooks to | |
| 1278 various major modes by executing @code{viper-set-syntax-preference} as in | |
| 1279 the following example: | |
| 1280 | |
| 1281 @example | |
| 1282 (viper-set-syntax-preference nil "emacs") | |
| 1283 @end example | |
| 1284 | |
| 1285 @findex @code{viper-set-syntax-preference} | |
| 1286 | |
| 1287 The above discussion of the meaning of Viper's words concerns only Viper's | |
| 1288 movement commands. In regular expressions, words remain the same as in | |
| 1289 Emacs. That is, the expressions @code{\w}, @code{\>}, @code{\<}, etc., use | |
| 1290 Emacs' idea of what is a word, and they don't look into the value of | |
| 1291 variable @code{viper-syntax-preference}. This is because Viper doesn't change | |
| 1292 syntax tables in fear of upsetting the various major modes that set these | |
| 1293 tables. | |
| 1294 | |
| 1295 @cindex textmarkers | |
| 1296 | |
| 1297 Textmarkers in Viper remember the file and the position, so that you can | |
| 1298 switch files by simply doing @kbd{'a}. If you set up a regimen for using | |
| 1299 Textmarkers, this is very useful. Contents of textmarkers can be viewed | |
| 1300 by @kbd{[marker}. (Contents of registers can be viewed by @kbd{]register}). | |
| 1301 | |
| 1302 @node New Commands, Useful Packages, Movement and Markers, Improvements over Vi | |
| 1303 @section New Commands | |
| 1304 | |
| 1305 These commands have no Vi analogs. | |
| 1306 | |
| 1307 @table @kbd | |
| 1308 @item C-x, C-c | |
| 1309 @kindex @kbd{C-x} | |
| 1310 @kindex @kbd{C-c} | |
| 1311 These two keys invoke many important Emacs functions. For example, if you | |
| 1312 hit @kbd{C-x} followed by @kbd{2}, then the current window will be split | |
| 1313 into 2. Except for novice users, @kbd{C-c} is also set to execute an Emacs | |
| 1314 command from the current major mode. @key{ESC} will do the same, if you | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1315 configure @key{ESC} as Meta by setting @code{viper-no-multiple-ESC} to @code{nil} |
| 25829 | 1316 in @file{.viper}. @xref{Customization}. @kbd{C-\} in Insert, Replace, or Vi |
| 1317 states will make Emacs think @kbd{Meta} has been hit.@refill | |
| 1318 @item \ | |
| 1319 @kindex @kbd{\} | |
| 1320 Escape to Emacs to execute a single Emacs command. For instance, | |
| 1321 @kbd{\ @key{ESC}} will act like a Meta key. | |
| 1322 @item Q | |
| 1323 @kindex @kbd{Q} | |
| 1324 @cindex query replace | |
| 1325 @kbd{Q} is for query replace. By default, | |
| 1326 each string to be replaced is treated as a regular expression. You can use | |
| 1327 @code{(setq viper-re-query-replace nil)} in your @file{.emacs} file to | |
| 1328 turn this off. (For normal searches, @kbd{:se nomagic} will work. Note | |
| 1329 that @kbd{:se nomagic} turns Regexps off completely, unlike Vi). | |
| 1330 @item v | |
| 1331 @itemx V | |
| 1332 @itemx C-v | |
| 1333 @kindex @kbd{v} | |
| 1334 @kindex @kbd{V} | |
| 1335 @kindex @kbd{C-v} | |
| 1336 These keys are used to visit files. @kbd{v} will switch to a buffer | |
| 1337 visiting file whose name can be entered in the Minibuffer. @kbd{V} is | |
| 1338 similar, but will use a window different from the current window. | |
| 1339 @kbd{C-v} is like @kbd{V}, except that a new frame (X window) will be used | |
| 1340 instead of a new Emacs window. | |
| 1341 @item # | |
| 1342 @kindex @kbd{#} | |
| 1343 If followed by a certain character @var{ch}, it becomes an operator whose | |
| 1344 argument is the region determined by the motion command that follows | |
| 1345 (indicated as <move>). | |
| 1346 Currently, @var{ch} can be one of @kbd{c}, @kbd{C}, @kbd{g}, @kbd{q}, and | |
| 1347 @kbd{s}. For instance, @kbd{#qr} will prompt you for a string and then | |
| 1348 prepend this string to each line in the buffer.@refill | |
| 1349 @item # c | |
| 1350 @kindex @kbd{#c<move>} | |
| 1351 @cindex changing case | |
| 1352 Change upper-case characters in the region to lower-case | |
| 1353 (@code{downcase-region}). | |
| 1354 Emacs command @kbd{M-l} does the same for words. | |
| 1355 @item # C | |
| 1356 @kindex @kbd{#C<move>} | |
| 1357 Change lower-case characters in the region to upper-case. For instance, | |
| 1358 @kbd{# C 3 w} will capitalize 3 words from the current point | |
| 1359 (@code{upcase-region}). | |
| 1360 Emacs command @kbd{M-u} does the same for words. | |
| 1361 @item # g | |
| 1362 @kindex @kbd{#g<move>} | |
| 1363 Execute last keyboard macro for each line in the region | |
| 1364 (@code{viper-global-execute}).@refill | |
| 1365 @item # q | |
| 1366 @kindex @kbd{#q<move>} | |
| 1367 Insert specified string at the beginning of each line in the region | |
| 1368 (@code{viper-quote-region}). The default string is composed of the comment | |
| 1369 character(s) appropriate for the current major mode. | |
| 1370 @item # s | |
| 1371 @kindex @kbd{#s<move>} | |
| 1372 Check spelling of words in the region (@code{spell-region}). | |
| 1373 The function used for spelling is determined from the variable | |
| 1374 @code{viper-spell-function}. | |
| 1375 @vindex @code{viper-spell-function} | |
| 1376 @item * | |
| 1377 @kindex @kbd{*} | |
| 1378 Call last keyboard macro. | |
| 1379 @item m . | |
| 1380 Set mark at point and push old mark off the ring | |
| 1381 @item m< | |
| 1382 @item m> | |
| 1383 Set mark at beginning and end of buffer, respectively. | |
| 1384 @item m, | |
| 1385 Jump to mark and pop mark off the ring. @xref{Mark,,Mark,emacs,The GNU | |
| 1386 Emacs Manual}, for more info. | |
| 1387 @item ] register | |
| 1388 @kindex @kbd{]<a-z>} | |
| 1389 View contents of register | |
| 1390 @item [ textmarker | |
| 1391 @kindex @kbd{[<a-z>} | |
| 1392 View filename and position of textmarker | |
| 1393 @item @@# | |
| 1394 @item @@register | |
| 1395 @item @@! | |
| 1396 @kindex @kbd{@@#} | |
| 1397 @kindex @kbd{@@<a-z>} | |
| 1398 @kindex @kbd{@@!} | |
| 1399 @cindex keyboard macros | |
| 1400 @cindex register execution | |
| 1401 | |
| 1402 Begin/end keyboard macro. @@register has a different meaning when used after | |
| 1403 a @kbd{@@#}. @xref{Macros and Registers}, for details | |
| 1404 @item [] | |
| 1405 @kindex @kbd{[]} | |
| 1406 Go to end of heading. | |
| 1407 @item g <@emph{movement command}> | |
| 1408 Search buffer for text delimited by movement command. The canonical | |
| 1409 example is @kbd{gw} to search for the word under the cursor. | |
| 1410 @xref{Improved Search}, for details.@refill | |
| 1411 @item C-g and C-] | |
| 1412 @kindex @kbd{C-g} | |
| 1413 @kindex @kbd{C-]} | |
| 1414 Quit and Abort Recursive edit. These may be necessary on occasion. | |
| 1415 @xref{Vi State}, for a reason. | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1416 @item C-c C-g |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1417 @kindex @kbd{C-c C-g} |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1418 Hitting @kbd{C-c} followed by @kbd{C-g} will display the information on the |
| 25829 | 1419 current buffer. This is the same as hitting @kbd{C-g} in Vi, but, as |
| 1420 explained above, @kbd{C-g} is needed for other purposes in Emacs. | |
| 1421 @item C-c / | |
| 1422 @kindex @kbd{C-c /} | |
| 1423 Without a prefix argument, this command toggles | |
| 1424 case-sensitive/case-insensitive search modes and plain vanilla/regular | |
| 1425 expression search. With the prefix argument 1, i.e., | |
| 1426 @kbd{1 C-c /}, this toggles case-sensitivity; with the prefix argument 2, | |
| 1427 toggles plain vanilla search and search using | |
| 1428 regular expressions. @xref{Viper Specials}, for alternative ways to invoke | |
| 1429 this function. | |
| 1430 @cindex vanilla search | |
| 1431 @cindex case-sensitive search | |
| 1432 @cindex case-insensitive search | |
| 1433 | |
| 1434 @item M-p and M-n | |
| 1435 @kindex @kbd{M-p} | |
| 1436 @kindex @kbd{M-n} | |
| 1437 In the Minibuffer, these commands navigate through the minibuffer | |
| 1438 histories, such as the history of search strings, Ex commands, etc. | |
| 1439 | |
| 1440 @item C-c M-p and C-c M-n | |
| 1441 @kindex @kbd{C-c M-p} | |
| 1442 @kindex @kbd{C-c M-n} | |
| 1443 @cindex Insertion history | |
| 1444 @cindex Insertion ring | |
| 1445 @cindex Command history | |
| 1446 @cindex Command ring | |
| 1447 | |
| 1448 In Insert or Replace state, these commands let the user | |
| 1449 peruse the history of insertion strings used in previous insert or replace | |
| 1450 commands. Try to hit @kbd{C-c M-p} or @kbd{C-c M-n} repeatedly and see what | |
| 1451 happens. @xref{Viper Specials}, for more. | |
| 1452 | |
| 1453 In Vi state, these commands let the user peruse the history of Vi-style | |
| 1454 destructive commands, such as @kbd{dw}, @kbd{J}, @kbd{a}, etc. | |
| 1455 By repeatedly typing @kbd{C-c M-p} or @kbd{C-c M-n} you will cycle Viper | |
| 1456 through the recent history of Vi commands, displaying the commands one by | |
| 1457 one. Once | |
| 1458 an appropriate command is found, it can be executed by typing `@kbd{.}'. | |
| 1459 | |
| 1460 Since typing @kbd{C-c M-p} is tedious, it is more convenient to bind an | |
| 1461 appropriate function to a function key on the keyboard and use that key. | |
| 1462 @xref{Viper Specials}, for details. | |
| 1463 | |
| 1464 @item Ex commands | |
| 1465 @findex @kbd{:args} | |
| 1466 @findex @kbd{:n} | |
| 1467 @findex @kbd{:pwd} | |
| 1468 @findex @kbd{:pre} | |
| 1469 The commands @kbd{:args}, @kbd{:next}, @kbd{:pre} behave | |
| 1470 differently. @kbd{:pwd} exists to get current directory. | |
| 1471 The commands @kbd{:b} and @kbd{:B} switch buffers around. @xref{File and | |
| 1472 Buffer Handling}, for details. | |
| 1473 There are also the new commands @kbd{:RelatedFile} and | |
| 1474 @kbd{PreviousRelatedFile} (which abbreviate to @kbd{R} and @kbd{P}, | |
| 1475 respectively. @xref{Viper Specials}, for details. | |
| 1476 @findex @kbd{:RelatedFile} | |
| 1477 @findex @kbd{:PreviousRelatedFile} | |
| 1478 @end table | |
| 1479 | |
| 1480 Apart from the new commands, many old commands have been enhanced. Most | |
| 1481 notably, Vi style macros are much more powerful in Viper than in Vi. @xref{Vi | |
| 1482 Macros}, for details. | |
| 1483 | |
| 1484 @node Useful Packages, ,New Commands, Improvements over Vi | |
| 1485 @section Useful Packages | |
| 1486 | |
| 1487 Some Emacs packages are mentioned here as an aid to the new Viper user, to | |
| 1488 indicate what Viper is capable of. | |
| 1489 A vast number comes with the standard Emacs distribution, and many more exist | |
| 1490 on the net and on the archives. | |
| 1491 | |
| 1492 This manual also mentions some Emacs features a new user | |
| 1493 should know about. The details of these are found in the GNU Emacs | |
| 1494 Manual. | |
| 1495 | |
| 1496 The features first. For details, look up the Emacs Manual. | |
| 1497 | |
| 1498 @table @samp | |
| 1499 @item Make | |
| 1500 @cindex make | |
| 1501 @cindex compiling | |
| 1502 | |
| 1503 Makes and Compiles can be done from the editor. Error messages will be | |
| 1504 parsed and you can move to the error lines. | |
| 1505 @item Shell | |
| 1506 @cindex shell | |
| 1507 @cindex interactive shell | |
| 1508 You can talk to Shells from inside the editor. Your entire shell session | |
| 1509 can be treated as a file. | |
| 1510 @item Mail | |
| 1511 @cindex email | |
| 1512 @cindex mail | |
| 1513 Mail can be read from and sent within the editor. Several sophisticated | |
| 1514 packages exist. | |
| 1515 @item Language Sensitive Editing | |
| 1516 Editing modes are written for most computer languages in existence. By | |
| 1517 controlling indentation, they catch punctuation errors. | |
| 1518 @end table | |
| 1519 | |
| 1520 The packages, below, represents a drop in the sea of special-purpose | |
| 1521 packages that come with standard distribution of Emacs. | |
| 1522 | |
| 1523 @table @samp | |
| 1524 @item Transparent FTP | |
| 1525 @cindex transparent ftp | |
| 1526 @pindex ange-ftp.el | |
| 1527 @code{ange-ftp.el} can ftp from the editor to files on other machines | |
| 1528 transparent to the user. | |
| 1529 @item RCS Interfaces | |
| 1530 @cindex version maintenance | |
| 1531 @cindex RCS | |
| 1532 @pindex vc.el | |
| 1533 @code{vc.el} for doing RCS commands from inside the editor | |
| 1534 @item Directory Editor | |
| 1535 @cindex dired | |
| 1536 @pindex dired.el | |
| 1537 @code{dired.el} for editing contents of directories and for navigating in | |
| 1538 the file system. | |
| 1539 @item Syntactic Highlighting | |
| 1540 @cindex font-lock | |
| 1541 @pindex font-lock.el | |
| 1542 @code{font-lock.el} for automatic highlighting various parts of a buffer | |
| 1543 using different fonts and colors. | |
| 1544 @item Saving Emacs Configuration | |
| 1545 @cindex desktop | |
| 1546 @pindex desktop.el | |
| 1547 @code{desktop.el} for saving/restoring configuration on Emacs exit/startup. | |
| 1548 @item Spell Checker | |
| 1549 @cindex ispell | |
| 1550 @pindex ispell.el | |
| 1551 @code{ispell.el} for spell checking the buffer, words, regions, etc. | |
| 1552 @item File and Buffer Comparison | |
| 1553 @cindex ediff | |
| 1554 @pindex ediff.el | |
| 1555 @code{ediff.el} for finding differences between files and for applying | |
| 1556 patches. | |
| 1557 @end table | |
| 1558 | |
| 1559 @noindent | |
| 1560 Emacs Lisp archives exist on | |
| 1561 @samp{archive.cis.ohio-state.edu} | |
| 1562 and @samp{wuarchive.wustl.edu}@refill | |
| 1563 | |
| 1564 | |
| 1565 @node Customization,Commands,Improvements over Vi,Top | |
| 1566 @chapter Customization | |
| 1567 | |
| 1568 @cindex customization | |
| 1569 | |
| 1570 Customization can be done in 2 ways. | |
| 1571 | |
| 1572 @itemize @bullet | |
| 1573 @item | |
| 1574 @cindex initialization | |
| 1575 @cindex .viper | |
| 1576 Elisp code in a @file{.viper} file in your home directory. Viper | |
| 1577 loads @file{.viper} just before it does the binding for mode | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1578 hooks. This is recommended for experts only. |
| 25829 | 1579 @item |
| 1580 @cindex .emacs | |
| 1581 Elisp code in your @file{.emacs} file before and after the @code{(require | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1582 'viper)} line. This method is @emph{not} recommended, unless you know what |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1583 you are doing. Only two variables, @code{viper-mode} and |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1584 @code{viper-custom-file-name}, are supposed to be customized in @file{.emacs}, |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1585 prior to loading Viper (i.e., prior to @code{(require 'viper)} command.@refill |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1586 @item |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1587 @cindex :customize |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1588 By executing the @kbd{:customize} Ex command. This takes you to the Emacs |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1589 customization widget, which lets you change the values of Viper |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1590 customizable variables easily. This method is good for novice and |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1591 experts alike. The customization code in the form of Lisp commands will be |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1592 placed in @file{~/.emacs} or some other customization file depending on the |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1593 version of Emacs that you use. Still, it is recommended to separate |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1594 Viper-related customization produced by the Emacs customization widget |
| 44616 | 1595 and keep it in the @file{.viper} file. |
| 25829 | 1596 |
| 1597 Some advanced customization cannot be accomplished this way, however, and | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1598 has to be done in Emacs Lisp in the @file{.viper} file. For the common |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1599 cases, examples are provided that you can use directly. |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1600 @end itemize |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1601 |
| 25829 | 1602 |
| 1603 @menu | |
| 1604 * Rudimentary Changes:: Simple constant definitions. | |
| 39267 | 1605 * Key Bindings:: Enabling Emacs Keys, Rebinding keys, etc. |
| 25829 | 1606 * Packages that Change Keymaps:: How to deal with such beasts. |
| 1607 * Viper Specials:: Special Viper commands. | |
| 1608 * Vi Macros:: How to do Vi style macros. | |
| 1609 @end menu | |
| 1610 | |
| 39267 | 1611 @node Rudimentary Changes,Key Bindings,Customization,Customization |
| 25829 | 1612 @section Rudimentary Changes |
| 1613 | |
| 1614 @cindex setting variables | |
| 1615 @cindex variables for customization | |
| 1616 @findex @kbd{:set} | |
| 1617 | |
| 1618 An easy way to customize Viper is to change the values of constants used in | |
| 1619 Viper. Here is the list of the constants used in Viper and their default | |
| 1620 values. The corresponding :se command is also indicated. (The symbols | |
| 1621 @code{t} and @code{nil} represent ``true'' and ``false'' in Lisp). | |
| 1622 | |
| 1623 Viper supports both the abbreviated Vi variable names and their full | |
| 1624 names. Variable completion is done on full names only. @key{TAB} and | |
| 1625 @key{SPC} complete | |
| 1626 variable names. Typing `=' will complete the name and then will prompt for | |
| 1627 a value, if applicable. For instance, @kbd{:se au @key{SPC}} will complete the | |
| 1628 command to @kbd{:set autoindent}; @kbd{:se ta @key{SPC}} will complete the command | |
| 1629 and prompt further like this: @kbd{:set tabstop = }. | |
| 1630 However, typing @kbd{:se ts @key{SPC}} will produce a ``No match'' message | |
| 1631 because @kbd{ts} is an abbreviation for @kbd{tabstop} and Viper supports | |
| 1632 completion on full names only. However, you can still hit @key{RET} | |
| 1633 or @kbd{=}, which will complete the command like this: @kbd{:set ts = } and | |
| 1634 Viper will be waiting for you to type a value for the tabstop variable. | |
| 1635 To get the full list of Vi variables, type @kbd{:se @key{SPC} @key{TAB}}. | |
| 1636 | |
| 1637 @table @code | |
| 1638 @item viper-auto-indent nil | |
| 1639 @itemx :se ai (:se autoindent) | |
| 1640 @itemx :se ai-g (:se autoindent-global) | |
| 1641 If @code{t}, enable auto indentation. | |
| 1642 by @key{RET}, @kbd{o} or @kbd{O} command. | |
| 1643 | |
| 1644 @code{viper-auto-indent} is a local variable. To change the value globally, use | |
| 1645 @code{setq-default}. It may be useful for certain major modes to have their | |
| 1646 own values of @code{viper-auto-indent}. This can be achieved by using | |
| 1647 @code{setq} to change the local value of this variable in the hooks to the | |
| 1648 appropriate major modes. | |
| 1649 | |
| 1650 @kbd{:se ai} changes the value of @code{viper-auto-indent} in the current | |
| 1651 buffer only; @kbd{:se ai-g} does the same globally. | |
| 1652 @item viper-electric-mode t | |
| 1653 If not @code{nil}, auto-indentation becomes electric, which means that | |
| 1654 @key{RET}, @kbd{O}, and @kbd{o} indent cursor according to the current | |
| 1655 major mode. In the future, this variable may control additional electric | |
| 1656 features. | |
| 1657 | |
| 1658 This is a local variable: @code{setq} changes the value of this variable | |
| 1659 in the current buffer only. Use @code{setq-default} to change the value in | |
| 1660 all buffers. | |
| 1661 @item viper-case-fold-search nil | |
| 1662 @itemx :se ic (:se ignorecase) | |
| 1663 If not @code{nil}, search ignores cases. | |
| 1664 This can also be toggled by quickly hitting @kbd{/} twice. | |
| 1665 @item viper-re-search nil | |
| 1666 @itemx :se magic | |
| 1667 If not @code{nil}, search will use regular expressions; if @code{nil} then | |
| 1668 use vanilla search. | |
| 1669 This behavior can also be toggled by quickly hitting @kbd{/} trice. | |
| 1670 @item buffer-read-only | |
| 1671 @itemx :se ro (:se readonly) | |
| 1672 Set current buffer to read only. To change globally put | |
| 1673 @code{(setq-default buffer-read-only t)} in your @file{.emacs} file. | |
| 1674 @item blink-matching-paren t | |
| 1675 @itemx :se sm (:se showmatch) | |
| 1676 Show matching parens by blinking cursor. | |
| 1677 @item tab-width t (default setting via @code{setq-default}) | |
| 1678 @itemx :se ts=value (:se tabstop=value) | |
| 1679 @itemx :se ts-g=value (:se tabstop-global=value) | |
| 1680 @code{tab-width} is a local variable that controls the width of the tab stops. | |
| 1681 To change the value globally, use @code{setq-default}; for local settings, | |
| 1682 use @code{setq}. | |
| 1683 | |
| 1684 The command @kbd{:se ts} | |
| 1685 sets the tab width in the current | |
| 1686 buffer only; it has no effect on other buffers. | |
| 1687 | |
| 1688 The command @kbd{:se ts-g} sets tab width globally, | |
| 1689 for all buffers where the tab is not yet set locally, | |
| 1690 including the new buffers. | |
| 1691 | |
| 1692 Note that typing @key{TAB} normally | |
| 1693 doesn't insert the tab, since this key is usually bound to | |
| 1694 a text-formatting function, @code{indent-for-tab-command} (which facilitates | |
| 1695 programming and document writing). Instead, the tab is inserted via the | |
| 1696 command @code{viper-insert-tab}, which is bound to @kbd{S-tab} (shift + tab). | |
| 1697 | |
| 1698 On some non-windowing terminals, Shift doesn't modify the @key{TAB} key, so | |
| 1699 @kbd{S-tab} behaves as if it were @key{TAB}. In such a case, you will have | |
| 1700 to bind @code{viper-insert-tab} to some other convenient key. | |
| 1701 | |
| 1702 @item viper-shift-width 8 | |
| 1703 @itemx :se sw=value (:se shiftwidth=value) | |
| 1704 The number of columns shifted by @kbd{>} and @kbd{<} commands. | |
| 1705 @item viper-search-wrap-around t | |
| 1706 @itemx :se ws (:se wrapscan) | |
| 1707 If not @code{nil}, search wraps around the end/beginning of buffer. | |
| 1708 @item viper-search-scroll-threshold 2 | |
| 1709 If search lands within this many lines of the window top or bottom, the | |
| 1710 window will be scrolled up or down by about 1/7-th of its size, to reveal | |
| 1711 the context. If the value is negative---don't scroll. | |
| 1712 @item viper-tags-file-name "TAGS" | |
| 1713 The name of the file used as the tag table. | |
| 1714 @item viper-re-query-replace nil | |
| 1715 If not @code{nil}, use reg-exp replace in query replace. | |
| 1716 @item viper-want-ctl-h-help nil | |
| 1717 If not @code{nil}, @kbd{C-h} is bound to @code{help-command}; | |
| 1718 otherwise, @kbd{C-h} is bound as usual in Vi. | |
| 1719 @item viper-vi-style-in-minibuffer t | |
| 1720 If not @code{nil}, Viper provides a high degree of compatibility with Vi | |
| 1721 insert mode when you type text in the Minibuffer; if @code{nil}, typing in | |
| 1722 the Minibuffer feels like plain Emacs. | |
| 1723 @item viper-no-multiple-ESC t | |
| 1724 If you set this to @code{nil}, you can use @key{ESC} as Meta in Vi state. | |
| 1725 Normally, this is not necessary, since graphical displays have separate | |
| 1726 Meta keys (usually on each side of the space bar). On a dumb terminal, Viper | |
| 1727 sets this variable to @code{twice}, which is almost like @code{nil}, except | |
| 1728 that double @key{ESC} beeps. This, too, lets @key{ESC} to be used as a Meta. | |
| 1729 @item viper-ESC-keyseq-timeout 200 on tty, 0 on windowing display | |
| 1730 Escape key sequences separated by this much delay (in milliseconds) are | |
| 1731 interpreted as command, ignoring the special meaning of @key{ESC} in | |
| 1732 VI. The default is suitable for most terminals. However, if your terminal | |
| 1733 is extremely slow, you might want to increase this slightly. You will know | |
| 1734 if your terminal is slow if the @key{ESC} key sequences emitted by the | |
| 1735 arrow keys are interpreted as separately typed characters (and thus the | |
| 1736 arrow keys won't work). Making this value too large will slow you down, so | |
| 1737 exercise restraint. | |
| 1738 @item viper-fast-keyseq-timeout 200 | |
| 1739 Key sequences separated by this many milliseconds are treated as Vi-style | |
| 1740 keyboard macros. If the key sequence is defined as such a macro, it will be | |
| 1741 executed. Otherwise, it is processed as an ordinary sequence of typed keys. | |
| 1742 | |
| 1743 Setting this variable too high may slow down your typing. Setting it too | |
| 1744 low may make it hard to type macros quickly enough. | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1745 @item viper-translate-all-ESC-keysequences @code{t} on tty, @code{nil} on windowing display |
|
28510
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1746 Normally, Viper lets Emacs translate only those ESC key sequences that are |
|
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1747 defined in the low-level key-translation-map or function-key-map, such as those |
|
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1748 emitted by the arrow and function keys. Other sequences, e.g., @kbd{\\e/}, are |
|
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1749 treated as @kbd{ESC} command followed by a @kbd{/}. This is good for people |
|
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1750 who type fast and tend to hit other characters right after they hit |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
1751 ESC. Other people like Emacs to translate @kbd{ESC} sequences all the time. |
|
28510
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1752 The default is to translate all sequences only when using a dumb terminal. |
|
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1753 This permits you to use @kbd{ESC} as a meta key in insert mode. For instance, |
|
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1754 hitting @kbd{ESC x} fast would have the effect of typing @kbd{M-x}. |
|
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1755 If your dumb terminal is not so dumb and understands the meta key, then you |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1756 probably will be better off setting this variable to @code{nil}. Try and see which |
|
28510
6fb7a3864791
2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
26490
diff
changeset
|
1757 way suits you best. |
| 25829 | 1758 @item viper-ex-style-motion t |
| 1759 Set this to @code{nil}, if you want @kbd{l,h} to cross | |
| 1760 lines, etc. @xref{Movement and Markers}, for more info. | |
| 1761 @item viper-ex-style-editing t | |
|
36340
1ca425b36c74
(Rudimentary Changes): Remove doubled `to'.
Gerd Moellmann <gerd@gnu.org>
parents:
36155
diff
changeset
|
1762 Set this to @code{nil}, if you want |
| 25829 | 1763 @kbd{C-h} and @key{DEL} to not stop |
| 1764 at the beginning of a line in Insert state, @key{X} and @key{x} to delete | |
| 1765 characters across lines in Vi command state, etc. | |
| 1766 @item viper-ESC-moves-cursor-back t | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1767 It @code{t}, cursor moves back 1 character when switching from insert state to vi |
|
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1768 state. If @code{nil}, the cursor stays where it was before the switch. |
| 25829 | 1769 @item viper-always t |
| 1770 @code{t} means: leave it to Viper to decide when a buffer must be brought | |
| 1771 up in Vi state, | |
| 1772 Insert state, or Emacs state. This heuristics works well in virtually all | |
| 1773 cases. @code{nil} means you either has to invoke @code{viper-mode} manually | |
| 1774 for each buffer (or you can add @code{viper-mode} to the appropriate major mode | |
| 1775 hooks using @code{viper-load-hook}). | |
| 1776 | |
| 1777 This option must be set in the file @file{~/.viper}. | |
| 1778 @item viper-custom-file-name "~/.viper" | |
| 1779 File used for Viper-specific customization. | |
| 1780 Change this setting, if you want. Must be set in @file{.emacs} (not @file{.viper}!) | |
| 1781 before Viper is loaded. Note that you | |
| 1782 have to set it as a string inside double quotes. | |
| 1783 @item viper-spell-function 'ispell-region | |
| 1784 Function used by the command @kbd{#c<move>} to spell. | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1785 @item viper-glob-function |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1786 The value of this variable is the function symbol used to expand wildcard |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1787 symbols. This is platform-dependent. The default tries to set this variable |
|
38866
662d4bf4871a
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
38514
diff
changeset
|
1788 to work with most shells, MS Windows, OS/2, etc. However, if it |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1789 doesn't work the way you expect, you should write your own. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1790 Use @code{viper-glob-unix-files} and @code{viper-glob-mswindows-files} in |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1791 @file{viper-util.el} as examples. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1792 |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1793 This feature is used to expand wildcards in the Ex command @kbd{:e}. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1794 Note that Viper doesn't support wildcards in the @kbd{:r} and @kbd{:w} |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1795 commands, because file completion is a better mechanism. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1796 @findex @code{viper-glob-function} |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
1797 |
| 25829 | 1798 @item ex-cycle-other-window t |
| 1799 If not @code{nil}, @kbd{:n} and @kbd{:b} will cycle through files in another | |
| 1800 window, if one exists. | |
| 1801 @item ex-cycle-through-non-files nil | |
| 1802 @kbd{:n} does not normally cycle through buffers. Set this to get | |
| 1803 buffers also. | |
| 1804 @item viper-want-emacs-keys-in-insert | |
| 1805 This is set to @code{nil} for user levels 1 and 2 and to @code{t} for user | |
| 1806 levels 3 and 4. Users who specify level 5 are allowed to set this variable | |
| 1807 as they please (the default for this level is @code{t}). If set to | |
| 1808 @code{nil}, complete Vi compatibility is provided in Insert state. This is | |
| 1809 really not recommended, as this precludes you from using language-specific | |
| 1810 features provided by the major modes. | |
| 1811 @item viper-want-emacs-keys-in-vi | |
| 1812 This is set to @code{nil} for user | |
| 1813 level 1 and to @code{t} for user levels 2--4. | |
| 1814 At level 5, users are allowed to set this variable as they please (the | |
| 1815 default for this level is @code{t}). | |
| 1816 If set to @code{nil}, complete Vi compatibility is provided | |
| 1817 in Vi command state. Setting this to @code{nil} is really a bad idea, | |
| 1818 unless you are a novice, as this precludes the use | |
| 1819 of language-specific features provided by the major modes. | |
| 1820 @item viper-keep-point-on-repeat t | |
| 1821 If not @code{nil}, point is not moved when the user repeats the previous | |
| 1822 command by typing `.' This is very useful for doing repeated changes with | |
| 1823 the @kbd{.} key. | |
| 1824 @item viper-repeat-from-history-key 'f12 | |
| 1825 Prefix key used to invoke the macros @kbd{f12 1} and @kbd{f12 2} that repeat | |
| 1826 the second-last and the third-last destructive command. | |
| 1827 Both these macros are bound (as Viper macros) to | |
| 1828 @code{viper-repeat-from-history}, | |
| 1829 which checks the second key by which it is invoked to see which of the | |
| 1830 previous commands to invoke. Viper binds @kbd{f12 1} and @kbd{f12 2} only, | |
| 1831 but the user can bind more in @file{~/.viper}. @xref{Vi Macros}, for how to do | |
| 1832 this. | |
| 1833 @item viper-keep-point-on-undo nil | |
| 1834 If not @code{nil}, Viper tries to not move point when undoing commands. | |
| 1835 Instead, it will briefly move the cursor to the place where change has | |
| 1836 taken place. However, if the undone piece of text is not seen in window, | |
| 1837 then point will be moved to the place where the change took place. | |
| 1838 Set it to @code{t} and see if you like it better. | |
| 1839 @item viper-delete-backwards-in-replace nil | |
| 1840 If not @code{nil}, @key{DEL} key will delete characters while moving the cursor | |
| 1841 backwards. If @code{nil}, the cursor will move backwards without deleting | |
| 1842 anything. | |
| 1843 @item viper-replace-overlay-face 'viper-replace-overlay-face | |
| 1844 On a graphical display, Viper highlights replacement regions instead of | |
| 1845 putting a @samp{$} at the end. This variable controls the so called | |
| 1846 @dfn{face} used to highlight the region. | |
| 1847 | |
| 1848 By default, @code{viper-replace-overlay-face} underlines the replacement on | |
| 1849 monochrome displays and also lays a stipple over them. On color displays, | |
| 1850 replacement regions are highlighted with color. | |
| 1851 | |
| 1852 If you know something about Emacs faces and don't like how Viper highlights | |
| 1853 replacement regions, you can change @code{viper-replace-overlay-face} by | |
| 1854 specifying a new face. (Emacs faces are described in the Emacs Lisp | |
| 1855 reference.) On a color display, the following customization method is | |
| 1856 usually most effective: | |
| 1857 @example | |
|
38514
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
1858 (set-face-foreground viper-replace-overlay-face "DarkSlateBlue") |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
1859 (set-face-background viper-replace-overlay-face "yellow") |
| 25829 | 1860 @end example |
| 1861 For a complete list of colors available to you, evaluate the expression | |
| 1862 @code{(x-defined-colors)}. (Type it in the buffer @code{*scratch*} and then | |
| 1863 hit the @kbd{C-j} key. | |
| 1864 | |
| 1865 @item viper-replace-overlay-cursor-color "Red" | |
| 1866 @vindex @code{viper-replace-overlay-cursor-color} | |
| 1867 Cursor color when it is inside the replacement region. | |
| 1868 This has effect only on color displays and only when Emacs runs as an X | |
| 1869 application. | |
| 1870 @item viper-insert-state-cursor-color nil | |
| 1871 @vindex @code{viper-insert-state-cursor-color} | |
| 1872 If set to a valid color, this will be the cursor color when Viper is in | |
| 1873 insert state. | |
| 1874 @item viper-replace-region-end-delimiter "$" | |
| 1875 A string used to mark the end of replacement regions. It is used only on | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1876 TTYs or if @code{viper-use-replace-region-delimiters} is non-@code{nil}. |
| 25829 | 1877 @item viper-replace-region-start-delimiter "" |
| 1878 A string used to mark the beginning of replacement regions. It is used | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1879 only on TTYs or if @code{viper-use-replace-region-delimiters} is non-@code{nil}. |
| 25829 | 1880 @item viper-use-replace-region-delimiters |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1881 If non-@code{nil}, Viper will always use @code{viper-replace-region-end-delimiter} and |
| 25829 | 1882 @code{viper-replace-region-start-delimiter} to delimit replacement regions, |
| 1883 even on color displays (where this is unnecessary). By default, this | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1884 variable is non-@code{nil} only on TTYs or monochrome displays. |
| 25829 | 1885 @item viper-allow-multiline-replace-regions t |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
1886 If non-@code{nil}, multi-line text replacement regions, such as those produced by |
| 25829 | 1887 commands @kbd{c55w}, @kbd{3C}, etc., will stay around until the user exits |
| 1888 the replacement mode. In this variable is set to @code{nil}, Viper will | |
| 1889 emulate the standard Vi behavior, which supports only intra-line | |
| 1890 replacement regions (and multi-line replacement regions are deleted). | |
| 1891 @item viper-toggle-key "\C-z" | |
| 1892 Specifies the key used to switch from Emacs to Vi and back. | |
| 1893 Must be set in @file{.viper}. This variable can't be | |
| 1894 changed interactively after Viper is loaded. | |
| 1895 | |
| 1896 In Insert state, this key acts as a temporary escape to Vi state, i.e., it | |
| 1897 will set Viper up so that the very next command will be executed as if it | |
| 1898 were typed in Vi state. | |
| 1899 @item viper-ESC-key "\e" | |
| 1900 Specifies the key used to escape from Insert/Replace states to Vi. | |
| 1901 Must be set in @file{.viper}. This variable cannot be | |
| 1902 changed interactively after Viper is loaded. | |
| 1903 @item viper-buffer-search-char nil | |
| 1904 Key used for buffer search. @xref{Viper Specials}, for details. | |
| 1905 @item viper-surrounding-word-function 'viper-surrounding-word | |
| 1906 The value of this variable is a function name that is used to determine | |
| 1907 what constitutes a word clicked upon by the mouse. This is used by mouse | |
| 1908 search and insert. | |
| 1909 @item viper-search-face 'viper-search-face | |
| 1910 Variable that controls how search patterns are highlighted when they are | |
| 1911 found. | |
| 1912 @item viper-vi-state-hook nil | |
| 1913 List of parameterless functions to be run just after entering the Vi | |
| 1914 command state. | |
| 1915 @item viper-insert-state-hook nil | |
| 1916 Same for Insert state. This hook is also run after entering Replace state. | |
| 1917 @item viper-replace-state-hook nil | |
| 1918 List of (parameterless) functions called just after entering Replace state | |
| 1919 (and after all @code{viper-insert-state-hook}). | |
| 1920 @item viper-emacs-state-hook nil | |
| 1921 List of (parameterless) functions called just after switching from Vi state | |
| 1922 to Emacs state. | |
| 1923 @item viper-load-hook nil | |
| 1924 List of (parameterless) functions called just after loading Viper. This is | |
| 1925 the last chance to do customization before Viper is up and running. | |
| 1926 @end table | |
| 1927 @noindent | |
| 1928 You can reset some of these constants in Viper with the Ex command @kbd{:set} | |
| 1929 (when so indicated in the table). Or you | |
| 1930 can include a line like this in your @file{.viper} file: | |
| 1931 @example | |
| 1932 (setq viper-case-fold-search t) | |
| 1933 @end example | |
| 1934 @vindex @code{viper-auto-indent} | |
| 1935 @vindex @code{viper-electric-mode} | |
| 1936 @vindex @code{viper-case-fold-search} | |
| 1937 @vindex @code{viper-re-search} | |
| 1938 @vindex @code{viper-shift-width} | |
| 1939 @vindex @code{buffer-read-only} | |
| 1940 @vindex @code{viper-search-wrap-around} | |
| 1941 @vindex @code{viper-search-scroll-threshold} | |
| 1942 @vindex @code{viper-search-face} | |
| 1943 @vindex @code{viper-tags-file-name} | |
| 1944 @vindex @code{viper-re-query-replace} | |
| 1945 @vindex @code{viper-want-ctl-h-help} | |
| 1946 @vindex @code{viper-vi-style-in-minibuffer} | |
| 1947 @vindex @code{viper-no-multiple-ESC} | |
| 1948 @vindex @code{viper-always} | |
| 1949 @vindex @code{viper-ESC-keyseq-timeout} | |
| 1950 @vindex @code{viper-fast-keyseq-timeout} | |
| 1951 @vindex @code{viper-ex-style-motion} | |
| 1952 @vindex @code{viper-ex-style-editing} | |
| 1953 @vindex @code{viper-ESC-moves-cursor-back} | |
| 1954 @vindex @code{viper-custom-file-name} | |
| 1955 @vindex @code{viper-spell-function} | |
| 1956 @vindex @code{ex-cycle-other-window} | |
| 1957 @vindex @code{ex-cycle-through-non-files} | |
| 1958 @vindex @code{viper-want-emacs-keys-in-insert} | |
| 1959 @vindex @code{viper-want-emacs-keys-in-vi} | |
| 1960 @vindex @code{viper-keep-point-on-repeat} | |
| 1961 @vindex @code{viper-keep-point-on-undo} | |
| 1962 @vindex @code{viper-delete-backwards-in-replace} | |
| 1963 @vindex @code{viper-replace-overlay-face} | |
| 1964 @vindex @code{viper-replace-region-end-symbol} | |
| 1965 @vindex @code{viper-replace-region-start-symbol} | |
| 1966 @vindex @code{viper-allow-multiline-replace-regions} | |
| 1967 @vindex @code{viper-toggle-key} | |
| 1968 @vindex @code{viper-ESC-key} | |
| 1969 @vindex @code{viper-buffer-search-char} | |
| 1970 @vindex @code{viper-surrounding-word-function} | |
| 1971 @vindex @code{viper-vi-state-hook} | |
| 1972 @vindex @code{viper-insert-state-hook} | |
| 1973 @vindex @code{viper-replace-state-hook} | |
| 1974 @vindex @code{viper-emacs-state-hook} | |
| 1975 | |
| 39267 | 1976 @node Key Bindings, Packages that Change Keymaps, Rudimentary Changes,Customization |
| 1977 @section Key Bindings | |
| 1978 | |
| 1979 @cindex key bindings | |
| 25829 | 1980 @cindex keymaps |
| 1981 | |
| 1982 Viper lets you define hot keys, i.e., you can associate keyboard keys | |
| 1983 such as F1, Help, PgDn, etc., with Emacs Lisp functions (that may already | |
| 1984 exist or that you will write). Each key has a "preferred form" in | |
| 1985 Emacs. For instance, the Up key's preferred form is [up], the Help key's | |
| 1986 preferred form is [help], and the Undo key has the preferred form [f14]. | |
| 1987 You can find out the preferred form of a key by typing @kbd{M-x | |
| 1988 describe-key-briefly} and then typing the key you want to know about. | |
| 1989 | |
|
35188
94d46968a93f
Don't say "X Windows". From Colin Walters <walters@cis.ohio-state.edu>.
Eli Zaretskii <eliz@gnu.org>
parents:
33679
diff
changeset
|
1990 Under the X Window System, every keyboard key emits its preferred form, |
|
94d46968a93f
Don't say "X Windows". From Colin Walters <walters@cis.ohio-state.edu>.
Eli Zaretskii <eliz@gnu.org>
parents:
33679
diff
changeset
|
1991 so you can just type |
| 25829 | 1992 |
| 1993 @lisp | |
| 1994 (global-set-key [f11] 'calendar) ; L1, Stop | |
| 1995 (global-set-key [f14] 'undo) ; L4, Undo | |
| 1996 @end lisp | |
| 1997 | |
| 1998 @noindent | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
1999 to bind L1 (a key that exists on some SUN workstations) so it will invoke |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2000 the Emacs Calendar and to bind L4 so it will undo changes. |
| 25829 | 2001 However, on a dumb terminal or in an Xterm window, even the standard arrow |
| 2002 keys may | |
| 2003 not emit the right signals for Emacs to understand. To let Emacs know about | |
| 2004 those keys, you will have to find out which key sequences they emit | |
| 2005 by typing @kbd{C-q} and then the key (you should switch to Emacs state | |
| 2006 first). Then you can bind those sequences to their preferred forms using | |
| 2007 @code{function-key-map} as follows: | |
| 2008 | |
| 2009 @lisp | |
| 2010 (cond ((string= (getenv "TERM") "xterm") | |
| 2011 (define-key function-key-map "\e[192z" [f11]) ; L1 | |
| 2012 (define-key function-key-map "\e[195z" [f14]) ; L4, Undo | |
| 2013 @end lisp | |
| 2014 | |
| 2015 The above illustrates how to do this for Xterm. On VT100, you would have to | |
| 2016 replace "xterm" with "vt100" and also change the key sequences (the same | |
| 2017 key may emit different sequences on different types of terminals). | |
| 2018 | |
| 2019 The above keys are global, so they are overwritten by the local maps | |
| 2020 defined by the major modes and by Viper itself. Therefore, if you wish to | |
| 2021 change a binding set by a major mode or by Viper, read this. | |
| 2022 | |
| 2023 Viper users who wish to specify their own key bindings should be concerned | |
| 2024 only with the following three keymaps: | |
| 2025 @code{viper-vi-global-user-map} for Vi state commands, | |
| 2026 @code{viper-insert-global-user-map} for Insert state commands, | |
| 2027 and @code{viper-emacs-global-user-map} for Emacs state commands (note: | |
| 2028 customized bindings for Emacs state made to @code{viper-emacs-global-user-map} | |
| 2029 are @emph{not} inherited by Insert state). | |
| 2030 | |
| 2031 For more information on Viper keymaps, see the header of the file | |
| 2032 @file{viper.el}. | |
| 2033 If you wish to change a Viper binding, you can use the | |
| 2034 @code{define-key} command, to modify @code{viper-vi-global-user-map}, | |
| 2035 @code{viper-insert-global-user-map}, and @code{viper-emacs-global-user-map}, as | |
| 2036 explained below. Each of these key maps affects the corresponding Viper state. | |
|
29165
641e43bad886
2000-05-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
28510
diff
changeset
|
2037 The keymap @code{viper-insert-global-user-map} also affects Viper's Replace |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
2038 state. |
| 25829 | 2039 |
| 2040 @noindent | |
| 2041 If you want to | |
| 2042 bind a key, say @kbd{C-v}, to the function that scrolls | |
| 2043 page down and to make @kbd{0} display information on the current buffer, | |
| 2044 putting this in @file{.viper} will do the trick in Vi state: | |
| 2045 @example | |
| 2046 (define-key viper-vi-global-user-map "\C-v" 'scroll-down) | |
| 2047 @end example | |
| 2048 @noindent | |
| 2049 To set a key globally, | |
| 2050 @example | |
| 2051 (define-key viper-emacs-global-user-map "\C-c m" 'smail) | |
| 2052 (define-key viper-vi-global-user-map "0" 'viper-info-on-file) | |
| 2053 @end example | |
| 2054 @noindent | |
| 2055 Note, however, that this binding may be overwritten by other keymaps, since | |
| 2056 the global keymap has the lowest priority. | |
| 2057 To make sure that nothing will override a binding in Emacs state, you | |
| 2058 can write this: | |
| 2059 @example | |
| 2060 (define-key viper-emacs-global-user-map "\C-c m" 'smail) | |
| 2061 @end example | |
| 2062 @noindent | |
| 2063 To customize the binding for @kbd{C-h} in Insert state: | |
| 2064 @example | |
|
38514
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
2065 (define-key viper-insert-global-user-map "\C-h" 'my-del-backwards-function) |
| 25829 | 2066 @end example |
| 2067 @noindent | |
| 2068 | |
| 55201 | 2069 Each Emacs command key calls some Lisp function. If you have enabled the |
| 25829 | 2070 Help, (@pxref{Rudimentary Changes}) @kbd{C-h k} will show you the function |
| 2071 for each specific key; @kbd{C-h b} will show all bindings, and @kbd{C-h m} | |
| 2072 will provide information on the major mode in effect. If Help is not | |
| 2073 enabled, you can still get help in Vi state by prefixing the above commands | |
| 2074 with @kbd{\}, e.g., @kbd{\ C-h k} (or you can use the Help menu in the | |
|
35188
94d46968a93f
Don't say "X Windows". From Colin Walters <walters@cis.ohio-state.edu>.
Eli Zaretskii <eliz@gnu.org>
parents:
33679
diff
changeset
|
2075 menu bar, if Emacs runs under X). |
| 25829 | 2076 |
| 2077 Viper users can also change bindings on a per major mode basis. As with | |
| 2078 global bindings, this can be done separately for each of the three main Viper | |
| 2079 states. To this end, Viper provides the function | |
| 2080 @code{viper-modify-major-mode}. | |
| 2081 @findex @code{viper-modify-major-mode} | |
| 2082 | |
| 2083 To modify keys in Emacs state for @code{my-favorite-major-mode}, the user | |
| 2084 needs to create a sparse keymap, say, @code{my-fancy-map}, bind whatever | |
| 2085 keys necessary in that keymap, and put | |
| 2086 | |
| 2087 @example | |
| 2088 (viper-modify-major-mode 'dired-mode 'emacs-state my-fancy-map) | |
| 2089 @end example | |
| 2090 | |
| 2091 @noindent | |
| 2092 in @file{~/.viper}. To do the same in Vi and Insert states, you should use | |
| 2093 @code{vi-state} and @code{insert-state}. Changes in Insert state are also | |
| 2094 in effect in Replace state. For instance, suppose that the user wants to | |
| 2095 use @kbd{dd} in Vi state under Dired mode to delete files, @kbd{u} to unmark | |
| 2096 files, etc. The following code in @file{~/.viper} will then do the job: | |
| 2097 | |
| 2098 @example | |
| 2099 (setq my-dired-modifier-map (make-sparse-keymap)) | |
| 2100 (define-key my-dired-modifier-map "dd" 'dired-flag-file-deletion) | |
| 2101 (define-key my-dired-modifier-map "u" 'dired-unmark) | |
| 2102 (viper-modify-major-mode 'dired-mode 'vi-state my-dired-modifier-map) | |
| 2103 @end example | |
| 2104 | |
| 2105 A Vi purist may want to modify Emacs state under Dired mode so that | |
| 2106 @kbd{k}, @kbd{l}, etc., will move around in directory buffers, as in | |
| 2107 Vi. Although this is not recommended, as these keys are bound to useful | |
| 2108 Dired functions, the trick can be accomplished via the following code: | |
| 2109 | |
| 2110 @example | |
| 2111 (setq my-dired-vi-purist-map (make-sparse-keymap)) | |
| 2112 (define-key my-dired-vi-purist-map "k" 'viper-previous-line) | |
| 2113 (define-key my-dired-vi-purist-map "l" 'viper-forward-char) | |
|
38514
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
2114 (viper-modify-major-mode 'dired-mode 'emacs-state my-dired-vi-purist-map) |
| 25829 | 2115 @end example |
| 2116 | |
| 2117 Yet another way to customize key bindings in a major mode is to edit the | |
| 2118 list @code{viper-major-mode-modifier-list} using the customization widget. | |
| 2119 @vindex @code{viper-major-mode-modifier-list} | |
| 2120 (This variable is in the Viper-misc customization group.) | |
| 2121 The elements of this list are triples of the form: (major-mode viper-state | |
| 2122 keymap), where the keymap contains bindings that are supposed to be active | |
| 2123 in the given major mode and the given viper-state. | |
| 2124 | |
| 2125 Effects similar to key binding changes can be achieved by defining Vi | |
| 2126 keyboard macros using the Ex commands @kbd{:map} and @kbd{:map!}. The | |
| 2127 difference is that multi-key Vi macros do not override the keys they are | |
| 2128 bound to, unless these keys are typed in quick succession. So, with macros, | |
| 2129 one can use the normal keys alongside with the macros. If per-mode | |
| 2130 modifications are needed, the user can try both ways and see which one is | |
| 2131 more convenient. | |
| 2132 @findex @kbd{:map} | |
| 2133 @xref{Vi Macros}, for details. | |
| 2134 | |
| 2135 Note: in major modes that come up in @emph{Emacs state} by default, the | |
| 2136 aforesaid modifications may not take place immediately (but only after the | |
| 2137 buffer switches to some other Viper state and then back to Emacs state). To | |
| 2138 avoid this, one should add @code{viper-change-state-to-emacs} to an | |
| 2139 appropriate hook of that major mode. (Check the function | |
| 2140 @code{viper-set-hooks} in @file{viper.el} for examples.) However, if you | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2141 did not set @code{viper-always} to @code{nil}, chances are that you won't |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2142 need to perform the above procedure, because Viper will take care of most |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2143 useful defaults. |
| 25829 | 2144 |
| 2145 | |
| 2146 Finally, Viper has a facility that lets the user define per-buffer | |
| 2147 bindings, i.e., bindings that are in effect in some specific buffers | |
| 2148 only. Unlike per-mode bindings described above, per-buffer bindings can be | |
| 2149 defined based on considerations other than the major mode. This is done | |
| 2150 via the function @code{viper-add-local-keys}, which lets one specify bindings | |
| 2151 that should be in effect in the current buffer only and for a specific Viper | |
| 2152 state. For instance, | |
| 2153 @lisp | |
| 2154 (viper-add-local-keys 'vi-state '(("ZZ" .@: TeX-command-master) | |
| 2155 ("ZQ" .@: viper-save-kill-buffer))) | |
| 2156 @end lisp | |
| 2157 @noindent | |
| 2158 redefines @kbd{ZZ} to invoke @code{TeX-command-master} in @code{vi-state} | |
| 2159 and @kbd{ZQ} to save-then-kill the current buffer. These bindings take | |
| 2160 effect only in the buffer where this command is executed. The typical use | |
| 2161 of this function is to execute the above expression from within a function | |
| 2162 that is included in a hook to some major mode. For instance, the above | |
| 2163 expression | |
| 2164 could be called from a function, @code{my-tex-init}, which may be added to | |
| 2165 @code{tex-mode-hook} as follows: | |
| 2166 @lisp | |
| 2167 (add-hook 'tex-mode-hook 'my-tex-init) | |
| 2168 @end lisp | |
| 2169 @noindent | |
| 2170 When TeX mode starts, the hook is executed and the above Lisp expression is | |
| 2171 evaluated. Then, the bindings for @kbd{ZZ} and @kbd{ZQ} are changed in Vi | |
| 2172 command mode for all buffers in TeX mode. | |
| 2173 | |
| 2174 Another useful application is to bind @kbd{ZZ} to @code{send-mail} | |
| 2175 in the Mail mode buffers (the specifics of this depend on which mail | |
| 2176 package you are using, @code{rmail}, @code{mh-e}, @code{vm}, etc. | |
| 2177 For instance, here is how to do this for @code{mh-e}, the Emacs interface | |
| 2178 to MH: | |
| 2179 @lisp | |
| 2180 (defun mh-add-vi-keys () | |
| 2181 "Set up ZZ for MH-e and XMH." | |
| 2182 (viper-add-local-keys 'vi-state '(("ZZ" .@: mh-send-letter)))) | |
| 2183 (add-hook 'mh-letter-mode-hook 'mh-add-vi-keys) | |
| 2184 @end lisp | |
| 2185 | |
| 2186 You can also use @code{viper-add-local-keys} to set per buffer | |
| 2187 bindings in Insert state and Emacs state by passing as a parameter the | |
| 2188 symbols @code{insert-state} and @code{emacs-state}, respectively. | |
| 2189 As with global bindings, customized local bindings done to Emacs state | |
| 2190 are not inherited by Insert state. | |
| 2191 | |
| 2192 On rare occasions, local keys may be added by mistake. Usually this is done | |
| 2193 indirectly, by invoking a major mode that adds local keys (e.g., | |
| 2194 @code{shell-mode} redefines @key{RET}). In such a case, exiting the wrong | |
| 2195 major mode won't rid you from unwanted local keys, since these keys are | |
| 2196 local to Viper state and the current buffer, not to the major mode. | |
| 2197 In such situations, the remedy is to type @kbd{M-x viper-zap-local-keys}. | |
| 2198 | |
| 2199 So much about Viper-specific bindings. | |
| 2200 @xref{Customization,,Customization,emacs,The GNU Emacs | |
| 2201 Manual}, and the Emacs quick reference card for the general info on key | |
| 2202 bindings in Emacs. | |
| 2203 | |
| 2204 @vindex @code{function-key-map} | |
| 2205 @vindex @code{viper-vi-global-user-map} | |
| 2206 @vindex @code{viper-insert-global-user-map} | |
| 2207 @vindex @code{viper-emacs-global-user-map} | |
| 2208 @findex @code{viper-add-local-keys} | |
| 2209 @findex @code{viper-zap-local-keys} | |
| 2210 | |
| 39267 | 2211 @node Packages that Change Keymaps,Viper Specials,Key Bindings,Customization |
| 25829 | 2212 @subsection Packages that Change Keymaps |
| 2213 @cindex C-c and Viper | |
| 2214 @cindex Viper and C-c | |
| 2215 | |
| 2216 Viper is designed to coexist with all major and minor modes of Emacs. This | |
| 2217 means that bindings set by those modes are generally available with Viper | |
| 2218 (unless you explicitly prohibit them by setting | |
| 2219 @code{viper-want-emacs-keys-in-vi} and @code{viper-want-emacs-keys-in-insert} to | |
| 2220 @code{nil}). | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2221 If @code{viper-always} is set to @code{t} (which is the default), Viper |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
2222 will try to bring each buffer |
| 25829 | 2223 in the Viper state that is most appropriate for that buffer. |
| 2224 Usually, this would be the Vi state, but sometimes it could be the Insert | |
| 2225 state or the Emacs state. | |
| 2226 | |
| 2227 Some major mode bindings will necessarily be overwritten by Viper. Indeed, in | |
| 2228 Vi state, most of the 1-character keys are used for Vi-style editing. This | |
| 2229 usually causes no problems because most packages designed for editing files | |
| 2230 typically do not bind such keys. Instead, they use key sequences that start | |
| 2231 with @kbd{C-x} and @kbd{C-c}. This is why it was so important for us to | |
| 2232 free up @kbd{C-x} and @kbd{C-c}. | |
| 2233 It is common for language-specific major modes to bind @key{TAB} and | |
| 2234 @kbd{C-j} (the line feed) keys to various formatting functions. This is | |
| 2235 extremely useful, but may require some getting used to for a Vi user. If you | |
| 2236 decide that this feature is not for you, you can re-bind these keys as | |
| 2237 explained earlier (@pxref{Customization}). | |
| 2238 | |
| 2239 Binding for @key{TAB} is one of the most unusual aspects of Viper for many | |
| 2240 novice users. In Emacs, @key{TAB} is used to format text and programs, and | |
| 2241 is extremely useful. For instance, hitting @key{TAB} causes the current | |
| 2242 line to be re-indented in accordance with the context. In programming, | |
| 2243 this is very important, since improper automatic indentation would | |
| 2244 immediately alert the programmer to a possible error. For instance, if a | |
| 2245 @kbd{)} or a @kbd{"} is missing somewhere above the current | |
| 2246 line, @key{TAB} is likely to mis-indent the line. | |
| 2247 | |
| 2248 For this reason, Viper doesn't change the standard Emacs binding of | |
| 2249 @key{TAB}, thereby sacrificing Vi compatibility | |
| 2250 (except for users at level 1). Instead, in Viper, the key | |
| 2251 @kbd{S-tab} (shift+ tab) is chosen to emulate Vi's @key{TAB}. | |
| 2252 | |
| 2253 We should note that on some non-windowing terminals, Shift doesn't modify | |
| 2254 the @key{TAB} key, so @kbd{S-tab} behaves as if it were @key{TAB}. In such | |
| 2255 a case, you will have to bind @code{viper-insert-tab} to some other | |
| 2256 convenient key. | |
| 2257 | |
| 2258 Some packages, notably Dired, Gnus, Info, etc., attach special meaning to | |
| 2259 common keys like @key{SPC}, @kbd{x}, @kbd{d}, @kbd{v}, and others. This | |
| 2260 means that Vi command state is inappropriate for working with these | |
| 2261 packages. Fortunately, these modes operate on read-only buffers and are | |
| 2262 designed not for editing files, but for special-purpose browsing, reading | |
| 2263 news, mail, etc., and Vi commands are meaningless in these situations. For | |
| 2264 this reason, Viper doesn't force Vi state on such major modes---it | |
| 2265 brings them in Emacs state. You can switch to Vi state by typing @kbd{C-z} | |
| 2266 if, for instance, you want to do Vi-style search in a buffer (although, | |
| 2267 usually, incremental search, which is bound to @kbd{C-s}, is sufficient in | |
| 2268 these situations). But you should then switch back to Emacs state if you | |
| 2269 plan to continue using these major modes productively. You can also switch | |
| 2270 to Vi temporarily, to execute just one command. This is done by typing | |
| 2271 @kbd{C-c \}. (In some of these modes, @kbd{/} and @kbd{:} are bound | |
| 2272 Vi-style, unless these keys perform essential duties.) | |
| 2273 | |
| 2274 If you would like certain major modes to come up in Emacs state rather than | |
| 2275 Vi state (but Viper thinks otherwise), you should put these major modes | |
| 2276 on the @code{viper-emacs-state-mode-list} list and delete them from | |
| 2277 @code{viper-vi-state-mode-list}. | |
| 2278 Likewise, you can force Viper's Insert state on a major mode by putting it | |
| 2279 in @code{viper-insert-state-mode-list}. | |
| 2280 @vindex @code{viper-emacs-state-mode-list} | |
| 2281 @vindex @code{viper-insert-state-mode-list} | |
| 2282 @vindex @code{viper-vi-state-mode-list} | |
| 2283 | |
| 2284 It is also possible to impose Vi on some major modes, even though they may | |
| 2285 bind common keys to specialized commands. This might make sense for modes | |
| 2286 that bind only a small number of common keys. For instance, Viper subverts | |
| 2287 the Shell mode by changing the bindings for @kbd{C-m} and @kbd{C-d} using | |
| 2288 @code{viper-add-local-keys} described in section on customization | |
| 2289 (@pxref{Customization}). | |
| 2290 | |
| 2291 In some cases, some @emph{minor} modes might override certain essential | |
| 2292 bindings in Vi command state. This is not a big priblem because this | |
| 2293 can happen only in the beginning, when the minor mode kicks in. Typing | |
| 2294 @code{M-x viper-mode} will correct the situation. Viper knows about | |
| 2295 several such minor modes and takes care of them, so the above trick | |
| 2296 is usually not necessary. If you find that some minor mode, e.g., | |
| 2297 @code{nasty-mode.el} interferes with Viper, putting the following in | |
| 2298 @file{.viper} should fix the problem: | |
| 2299 @lisp | |
| 2300 (viper-harness-minor-mode "nasty-mode") | |
| 2301 @end lisp | |
| 2302 @noindent | |
| 2303 The argument to @code{viper-harness-minor-mode} is the name of the file for the | |
| 2304 offending minor mode with the suffixes @file{.el} and @file{.elc} removed. | |
| 2305 | |
| 2306 It may not be always obvious which minor mode is at fault. The only | |
| 2307 guidance here is to look into the file that defines the minor mode you are | |
| 2308 suspecting, say @code{nasty-mode.el}, and see if it has a variable called | |
| 2309 @code{nasty-mode-map}. Then check if there is a statement of the form | |
| 2310 @lisp | |
| 2311 (define-key nasty-mode-map key function) | |
| 2312 @end lisp | |
| 2313 @noindent | |
| 2314 that binds the misbehaving | |
| 2315 keys. If so, use the above line to harness @code{nasty-mode}. If your | |
| 2316 suspicion is wrong, no harm is done if you harness a minor mode that | |
| 2317 doesn't need to be harnessed. | |
| 2318 | |
| 2319 @vindex @code{viper-want-emacs-keys-in-vi} | |
| 2320 @vindex @code{viper-want-emacs-keys-in-insert} | |
| 2321 @vindex @code{viper-always} | |
| 2322 @findex @code{viper-set-hooks} | |
| 2323 @findex @code{viper-mode} | |
| 2324 @findex @code{viper-harness-minor-mode} | |
| 2325 @findex @code{remove-hook} | |
| 2326 @findex @code{add-hook} | |
| 2327 | |
| 2328 @node Viper Specials,Vi Macros,Packages that Change Keymaps,Customization | |
| 2329 @section Viper Specials | |
| 2330 | |
| 2331 Viper extends Vi with a number of useful features. This includes various | |
| 2332 search functions, histories of search strings, Ex commands, insertions, and | |
| 2333 Vi's destructive commands. In addition, Viper supports file name completion | |
| 2334 and history, completion of Ex commands and variables, and many other | |
| 2335 features. Some of these features are explained in detail elsewhere in this | |
| 2336 document. Other features are explained here. | |
| 2337 | |
| 2338 @table @code | |
| 2339 @item (viper-buffer-search-enable) | |
| 2340 @item viper-buffer-search-char nil | |
| 2341 Enable buffer search. Explicit call to @code{viper-buffer-search-enable} | |
| 2342 sets @code{viper-buffer-search-char} to @kbd{g}. Alternatively, the user can | |
| 2343 set @code{viper-buffer-search-char} in @file{.viper} to a key sequence | |
| 2344 to be used for buffer search. There is no need to call | |
| 2345 @code{viper-buffer-search-enable} in that case. | |
| 2346 @findex @code{viper-buffer-search-enable} | |
| 2347 @vindex @code{viper-buffer-search-char} | |
| 2348 @item viper-toggle-search-style | |
| 2349 This function, bound to @kbd{C-c /}, lets one toggle case-sensitive and | |
| 2350 case-insensitive search, and also switch between plain vanilla search and | |
| 2351 search via regular expressions. Without the prefix argument, the user is | |
| 2352 asked which mode to toggle. With prefix argument 1, this toggles | |
| 2353 case-sensitivity. With prefix argument 2, regular expression/vanilla search | |
| 2354 will be toggled. | |
| 2355 | |
| 2356 However, we found that the most convenient way to toggle | |
| 2357 these options is to bind a Vi macro to | |
| 2358 bind @kbd{//} to toggles case sensitivity and to @kbd{///} to toggles | |
| 2359 vanilla search. Thus, quickly hitting @kbd{/} twice will switch Viper from | |
| 2360 case sensitive search to case-insensitive. Repeating this once again will | |
| 2361 restore the original state. Likewise, quickly hitting @kbd{/} three times | |
| 2362 will switch you from vanilla-style search to search via regular expressions. | |
| 2363 If you hit something other than @kbd{/} after the first @kbd{/} or if the | |
| 2364 second @kbd{/} doesn't follow quickly enough, then Viper will issue the | |
| 2365 usual prompt @kbd{/} and will wait for input, as usual in Vi. | |
| 2366 If you don't like this behavior, you can ``unrecord'' these macros in your | |
| 2367 @file{~/.viper} file. For instance, if you don't like the above feature, put | |
| 2368 this in @file{~/.viper}: | |
| 2369 @example | |
| 2370 (viper-set-searchstyle-toggling-macros 'undefine) | |
| 2371 @end example | |
| 2372 @findex @code{viper-set-searchstyle-toggling-macros} | |
| 2373 | |
| 2374 @item Vi-isms in Emacs state | |
| 2375 Some people find it useful to use the Vi-style search key, `/', to invoke | |
| 2376 search in modes which Viper leaves in emacs-state. These modes are: | |
| 2377 @code{dired-mode}, @code{mh-folder-mode}, @code{gnus-group-mode}, | |
| 2378 @code{gnus-summary-mode}, @code{Info-mode}, and @code{Buffer-menu-mode} | |
| 2379 (more may be added in the future). So, in the above modes, Viper binds `/' | |
| 2380 so that it will behave Vi-style. Furthermore, in those major modes, Viper | |
| 2381 binds `:' to invoke ex-style commands, like in vi-state. And, as described | |
| 2382 above, `//' and `///' get bound to Vi-style macros that toggle | |
| 2383 case-insensitivity and regexp-search. | |
| 2384 | |
| 2385 If you don't like these features---which I don't really understand---you | |
| 2386 can unbind `/' and `:' in @code{viper-dired-modifier-map} (for Dired) or in | |
| 2387 @code{viper-slash-and-colon-map}, for other modes. | |
| 2388 @vindex @code{viper-slash-and-colon-map} | |
| 2389 @vindex @code{viper-dired-modifier-map} | |
| 2390 | |
| 2391 To unbind the macros `//' and `///' for a major mode where you feel they | |
| 2392 are undesirable, execute @code{viper-set-emacs-state-searchstyle-macros} with a | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
2393 non-@code{nil} argument. This can be done either interactively, by supplying a |
| 25829 | 2394 prefix argument, or by placing |
| 2395 @example | |
| 2396 (viper-set-emacs-state-searchstyle-macros 'undefine) | |
| 2397 @end example | |
| 2398 @findex @code{viper-set-emacs-state-searchstyle-macros} | |
| 2399 in the hook to the major mode (e.g., @code{dired-mode-hook}). | |
| 2400 @xref{Vi Macros}, for more information on Vi macros. | |
| 2401 | |
| 2402 @item viper-heading-start | |
| 2403 @item viper-heading-end | |
| 2404 @cindex headings | |
| 2405 @cindex sections | |
| 2406 @cindex paragraphs | |
| 2407 @cindex sentences | |
| 2408 Regular Expressions for @kbd{[[} and @kbd{]]}. Note that Emacs defines | |
| 2409 Regexps for paragraphs and sentences. @xref{Paragraphs,,Paragraphs and | |
| 2410 Sentences,emacs,The GNU Emacs Manual}, for details. | |
| 2411 @item M-x viper-set-expert-level | |
| 2412 @findex @code{viper-set-expert-level} | |
| 2413 Change your user level interactively. | |
| 2414 @item viper-smart-suffix-list '("" "tex" "c" "cc" "el" "p") | |
| 2415 @vindex @code{viper-smart-suffix-list} | |
| 2416 Viper supports Emacs-style file completion when it prompts the user for a | |
| 2417 file name. However, in many cases, the same directory may contain files | |
| 2418 with identical prefix but different suffixes, e.g., prog.c, prog.o, | |
| 2419 paper.tex, paper.dvi. In such cases, completion will stop at the `.'. | |
| 2420 If the above variable is a list of strings representing suffixes, Viper will | |
| 2421 try these suffixes | |
| 2422 in the order listed and will check if the corresponding file exists. | |
| 2423 | |
| 2424 For instance, if completion stopped at `paper.'@: and the user typed | |
| 2425 @key{RET}, | |
| 2426 then Viper will check if the files `paper.', `paper.tex', `paper.c', etc., exist. | |
| 2427 It will take the first such file. If no file exists, Viper will give a chance | |
| 2428 to complete the file name by typing the appropriate suffix. If `paper.'@: was | |
| 2429 the intended file name, hitting return will accept it. | |
| 2430 | |
| 2431 To turn this feature off, set the above variable to @code{nil}. | |
| 2432 | |
| 2433 @item viper-insertion-ring-size 14 | |
| 2434 @vindex @code{viper-insertion-ring-size} | |
| 2435 @cindex Insertion ring | |
| 2436 Viper remembers what was previously inserted in Insert and Replace states. | |
| 2437 Several such recent insertions are kept in a special ring of strings of size | |
| 2438 @code{viper-insertion-ring-size}. | |
| 2439 If you enter Insert or Replace state you can reinsert strings from this | |
| 2440 ring by typing @kbd{C-c M-p} or @kbd{C-c M-n}. The former will search the | |
| 2441 ring in | |
| 2442 the direction of older insertions, and the latter will search in | |
| 2443 the direction of newer insertions. Hitting @kbd{C-c M-p} or @kbd{C-c M-n} | |
| 2444 in succession | |
| 2445 will undo the previous insertion from the ring and insert the next item on | |
| 2446 the ring. If a larger ring size is needed, change the value of the above | |
| 2447 variable in the @file{~/.viper} file. | |
| 2448 | |
| 2449 Since typing these sequences of keys may be tedious, it is suggested that the | |
| 2450 user should bind a function key, such as @kbd{f31}, as follows: | |
| 2451 @example | |
| 2452 (define-key viper-insert-global-user-map [f31] | |
| 2453 'viper-insert-prev-from-insertion-ring) | |
| 2454 @end example | |
| 2455 This binds @kbd{f31} (which is usually @kbd{R11} on a Sun workstation) | |
| 2456 to the function that inserts the previous string in the insertion history. | |
| 2457 To rotate the history in the opposite | |
| 2458 direction, you can either bind an unused key to | |
| 2459 @code{viper-insert-next-from-insertion-ring} or hit any digit (1 to 9) then | |
| 2460 @kbd{f31}. | |
| 2461 | |
| 2462 One should not bind the above functions to @kbd{M-p} or @kbd{M-n}, since | |
| 2463 this will interfere with the Minibuffer histories and, possibly, other | |
| 2464 major modes. | |
| 2465 | |
| 2466 @item viper-command-ring-size 14 | |
| 2467 @vindex @code{viper-command-ring-size} | |
| 2468 @cindex Destructive command ring | |
| 2469 @cindex Destructive command history | |
| 2470 Viper keeps track of the recent history of destructive | |
| 2471 commands, such as @kbd{dw}, @kbd{i}, etc. | |
| 2472 In Vi state, | |
| 2473 the most recent command can be re-executed by hitting `@kbd{.}', as in Vi. | |
| 2474 However, repeated typing @kbd{C-c M-p} will cause Viper to show the | |
| 2475 previous destructive commands in the minibuffer. Subsequent hitting `@kbd{.}' | |
| 2476 will execute the command that was displayed last. | |
| 2477 The key @kbd{C-c M-n} will cycle through the command history in the | |
| 2478 opposite direction. | |
| 2479 Since typing @kbd{C-c M-p} may be tedious, it is more convenient to bind an | |
| 2480 appropriate function to an unused function key on the keyboard and use that | |
| 2481 key. For instance, the following | |
| 2482 @example | |
| 2483 (define-key viper-vi-global-user-map [f31] | |
| 2484 'viper-prev-destructive-command) | |
| 2485 @end example | |
| 2486 binds the key @kbd{f31} (which is usually @kbd{R11} on a Sun workstation) | |
| 2487 to the function that searches the command history in the direction of older | |
| 2488 commands. To search in the opposite | |
| 2489 direction, you can either bind an unused key to | |
| 2490 @code{viper-next-destructive-command} or hit any digit (1 to 9) then @kbd{f31}. | |
| 2491 | |
| 2492 One should not bind the above functions to @kbd{M-p} or @kbd{M-n}, since | |
| 2493 this will interfere with the Minibuffer histories and, possibly, other | |
| 2494 major modes. | |
| 2495 | |
| 2496 @item viper-minibuffer-vi-face 'viper-minibuffer-vi-face | |
| 2497 @item viper-minibuffer-insert-face 'viper-minibuffer-insert-face | |
| 2498 @item viper-minibuffer-emacs-face 'viper-minibuffer-emacs-face | |
| 2499 These faces control the appearance of the minibuffer text in the | |
| 2500 corresponding Viper states. You can change the appearance of these faces | |
| 2501 through Emacs' customization widget, which is accessible through the | |
| 2502 menubar. | |
| 2503 | |
| 2504 Viper is located in this widget under the @emph{Emulations} customization | |
| 2505 subgroup of the @emph{Editing} group. All Viper faces are grouped together | |
| 2506 in Viper's @emph{Highlighting} customization subgroup. | |
| 2507 | |
| 2508 Note that only the text you type in is affected by the above faces. | |
| 2509 Prompts and Minibuffer messages are not affected. | |
| 2510 | |
| 2511 Purists who do not like adornments in the minibuffer can always zap them by | |
| 2512 putting | |
| 2513 @example | |
| 2514 (copy-face 'default 'viper-minibuffer-vi-face) | |
| 2515 (copy-face 'default 'viper-minibuffer-insert-face) | |
| 2516 (copy-face 'default 'viper-minibuffer-emacs-face) | |
| 2517 @end example | |
| 2518 in the @file{~/.viper} file or through the customization widget, as | |
| 2519 described above. However, in that case, the user will not have any | |
| 2520 indication of the current Viper state in the minibuffer. (This is important | |
| 2521 if the user accidentally switches to another Viper state by typing @key{ESC} or | |
| 2522 @kbd{C-z}). | |
| 2523 @item M-x viper-go-away | |
| 2524 @findex @code{viper-go-away} | |
| 2525 Make Viper disappear from the face of your running Emacs instance. If your | |
| 2526 fingers start aching again, @kbd{M-x viper-mode} might save your day. | |
| 2527 @item M-x toggle-viper-mode | |
| 2528 @findex @code{toggle-viper-mode} | |
| 2529 Toggle Viperization of Emacs on and off. | |
| 2530 @end table | |
| 2531 | |
| 2532 @cindex Multifile documents and programs | |
| 2533 | |
| 2534 Viper provides some support for multi-file documents and programs. | |
| 2535 If a document consists of several files we can designate one of them as a | |
| 2536 master and put the following at the end of that file: | |
| 2537 @lisp | |
| 2538 ;;; Local Variables: | |
| 37806 | 2539 ;;; eval: (viper-setup-master-buffer "file1" "file2" "file3" "file4") |
| 25829 | 2540 ;;; End: |
| 2541 @end lisp | |
| 2542 @noindent | |
| 37806 | 2543 where @code{file1} to @code{file4} are names of files related to the master |
| 25829 | 2544 file. Next time, when the master file is visited, the command |
| 2545 @code{viper-setup-master-buffer} will be evaluated and the above files will | |
| 2546 be associated with the master file. Then, the new Ex command | |
| 37806 | 2547 @kbd{:RelatedFile} (abbr.@: @kbd{:R}) will display files 1 to 4 one after |
| 25829 | 2548 another, so you can edit them. If a file is not in any Emacs buffer, it |
| 2549 will be visited. The command @kbd{PreviousRelatedFile} (abbr., @kbd{:P}) | |
| 2550 goes through the file list in the opposite direction. | |
| 2551 @findex @kbd{:RelatedFile} | |
| 2552 @findex @kbd{:PreviousRelatedFile} | |
| 2553 | |
| 2554 These commands are akin to @kbd{:n} and @kbd{:N}, but they allow the user to | |
| 2555 focus on relevant files only. | |
| 2556 | |
| 2557 Note that only the master file needs to have the aforementioned block of | |
| 2558 commands. Also, ";;;" above can be replaced by some other | |
| 2559 markers. Semicolon is good for Lisp programs, since it is considered a | |
| 2560 comment designator there. For LaTeX, this could be "%%%", and for C the | |
| 2561 above block should be commented out. | |
| 2562 | |
| 2563 Even though these commands are sometimes useful, they are no substitute for | |
| 2564 the powerful @emph{tag table} facility of Emacs. Viper's @kbd{:tag} command | |
| 2565 in a primitive interface to Emacs tags. @xref{Tags,Tags,Tags,emacs, | |
| 2566 The Gnu Emacs Manual}, for more information on tags. | |
| 2567 | |
| 2568 The following two commands are normally bound to a mouse click and are part | |
| 2569 of Viper. They work only if Emacs runs as an application under X | |
| 2570 Windows (or under some other window system for which a port of GNU Emacs 20 | |
| 2571 is available). Clicking the mouse when Emacs is invoked in an Xterm window | |
| 2572 (using @code{emacs -nw}) will do no good. | |
| 2573 | |
| 2574 @table @code | |
| 2575 @cindex mouse | |
| 2576 @cindex mouse-search | |
| 2577 @item viper-mouse-search-key (meta shift 1) | |
| 2578 @vindex @code{viper-mouse-insert-key} | |
| 2579 This variable controls the @emph{mouse-search} feature of Viper. The | |
| 2580 default value | |
| 2581 states that holding Meta and Shift keys while clicking mouse button 1 | |
| 2582 should initiate search for a region under the mouse pointer (defined | |
| 2583 below). This command can take a prefix argument, which indicates the | |
| 2584 occurrence of the pattern to search for. | |
| 2585 | |
| 2586 Note: while loading initially, Viper binds this mouse action only if it is | |
| 2587 not already bound to something else. If you want to use the mouse-search | |
|
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2588 feature, and the @kbd{Meta-Shift-Mouse-1} mouse action is already bound to |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2589 something else, you can rebind the mouse-search feature by setting |
| 25829 | 2590 @code{viper-mouse-search-key} to something else in your @code{~/.viper} |
| 2591 file: | |
| 2592 @lisp | |
| 2593 (setq viper-mouse-search-key '(meta 1)) | |
| 2594 @end lisp | |
| 2595 This would bind mouse search to the action invoked by pressing the | |
| 2596 Meta key and clicking mouse button 1. The allowed values of | |
| 2597 @code{viper-mouse-search-key} are lists that contain a mouse-button number | |
| 2598 (1,2, or 3) and any combination of the words `control', `meta', and | |
| 2599 `shift'. | |
| 2600 | |
| 2601 If the requested mouse action (e.g., (meta 1)) is already taken for other | |
| 2602 purposes then you have to confirm your intention by placing the following | |
| 2603 command in @code{~/.viper} after setting @code{viper-mouse-search-key}: | |
| 2604 @lisp | |
| 2605 (viper-bind-mouse-search-key 'force) | |
| 2606 @end lisp | |
| 2607 | |
| 2608 You can also change this setting interactively, through the customization | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2609 widget of Emacs (type @kbd{:customize}). |
| 25829 | 2610 |
| 2611 The region that is chosen as a pattern to search for is determined as | |
| 2612 follows. If search is invoked via a single click, Viper chooses the region | |
| 2613 that lies between the beginning of the ``word'' under the pointer (``word'' | |
| 2614 is understood in Vi sense) and the end of that word. The only difference | |
| 2615 with Vi's words is that in Lisp major modes `-' is considered an | |
| 2616 alphanumeric symbol. This is done for the convenience of working with Lisp | |
| 2617 symbols, which often have an `-' in them. Also, if you click on a | |
| 2618 non-alphanumeric character that is not a word separator (in Vi sense) then | |
| 2619 this character will also be considered alphanumeric, provided that it is | |
| 2620 adjacent (from either side) to an alphanumeric character. This useful | |
| 2621 feature gives added control over the patterns selected by the mouse click. | |
| 2622 | |
| 2623 On a double-click, the region is determined by the beginning of the current | |
| 2624 Vi's ``Word'' (i.e., the largest non-separator chunk of text) and the End | |
| 2625 of that ``Word'' (as determined by the @kbd{E} command). | |
| 2626 | |
| 2627 On a triple-click, the region consists of the entire line where the click | |
| 2628 occurred with all leading and trailing spaces and tabs removed. | |
| 2629 | |
| 2630 @cindex mouse-insert | |
| 2631 @item viper-mouse-insert-key (meta shift 2) | |
| 2632 @vindex @code{viper-mouse-insert-key} | |
| 2633 This variable controls the @emph{mouse-insert} feature of Viper. | |
| 2634 The above default value states that | |
| 2635 holding Meta and Shift keys while clicking mouse button 2 | |
| 2636 should insert the region surrounding the | |
| 2637 mouse pointer. The rules defining this region are the same as for | |
| 2638 mouse-search. This command takes an optional prefix argument, which | |
| 2639 indicates how many such regions to snarf from the buffer and insert. (In | |
| 2640 case of a triple-click, the prefix argument is ignored.) | |
| 2641 | |
| 2642 Note: while loading initially, Viper binds this mouse action only if it not | |
| 2643 already bound to something else. If you want to use this feature and the | |
| 2644 default mouse action is already bound, you can rebind mouse-insert by | |
| 2645 placing this command in @code{~/.viper}: | |
| 2646 @lisp | |
| 2647 (setq viper-mouse-insert-key '(meta 2)) | |
| 2648 @end lisp | |
| 2649 If you want to bind mouse-insert to an action even if this action is | |
| 2650 already taked for other purposes in Emacs, then you should add this command | |
| 2651 to @code{~/.viper}, after setting @code{viper-mouse-insert-key}: | |
| 2652 @lisp | |
| 2653 (viper-bind-mouse-insert-key 'force) | |
| 2654 @end lisp | |
| 2655 | |
| 2656 This value can also be changed via the Emacs customization widget at the | |
| 2657 menubar. | |
| 2658 | |
| 2659 @item viper-multiclick-timeout | |
| 2660 This variable controls the rate at which double-clicking must occur for the | |
| 2661 purpose of mouse search and mouse insert. By default, this is set to | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
2662 @code{double-click-time} in Emacs and to |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
2663 @code{mouse-track-multi-click-time} milliseconds in XEmacs. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
2664 @end table |
|
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2665 @kindex @kbd{S-Mouse-1} |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2666 @kindex @kbd{S-Mouse-2} |
| 25829 | 2667 @kindex @kbd{meta shift button1up} |
| 2668 @kindex @kbd{meta shift button2up} | |
| 2669 @vindex @code{viper-multiclick-timeout} | |
| 2670 @findex @code{viper-mouse-click-insert-word} | |
| 2671 @findex @code{viper-mouse-click-search-word} | |
| 2672 | |
| 2673 Note: The above functions search and insert in the selected window of | |
| 2674 the latest active frame. This means that you can click in another window or | |
| 2675 another frame and have search or insertion done in the frame and window you | |
| 2676 just left. This lets one use these functions in a multi-frame | |
| 2677 configuration. However, this may require some getting used to. For | |
| 2678 instance, if you are typing in a frame, A, and then move the mouse to frame | |
| 2679 B and click to invoke mouse search, search (or insertion) will be performed | |
| 2680 in frame A. To perform search/insertion in frame B, you will first have to | |
| 2681 shift focus there, which doesn't happen until you type a character or | |
| 2682 perform some other action in frame B---mouse search doesn't shift focus. | |
| 2683 | |
| 2684 If you decide that you don't like the above feature and always want | |
| 2685 search/insertion be performed in the frame where the click occurs, don't | |
| 2686 bind (and unbind, if necessary) @code{viper-mouse-catch-frame-switch} from | |
| 2687 the mouse event it is bound to. | |
| 2688 | |
| 2689 Mouse search is integrated with Vi-style search, so you can | |
| 2690 repeat it with @kbd{n} and @kbd{N}. It should be also noted that, while | |
| 2691 case-sensitivity of search in Viper is controlled by the variable | |
| 2692 @code{viper-case-fold-search}, the case of mouse search is | |
| 2693 controlled by the Emacs variable @code{case-fold-search}, which may be set | |
| 2694 differently from @code{viper-case-fold-search}. Therefore, case-sensitivity | |
| 2695 of mouse search may be different from that of the usual Vi-style search. | |
| 2696 | |
| 2697 Finally, if the way Viper determines the word to be searched for or to be | |
| 2698 inserted is not what you want, there is a variable, | |
| 2699 @code{viper-surrounding-word-function}, which can be changed to indicate | |
| 2700 another function for snarfing words out of the buffer. The catch is that | |
| 2701 you will then have to write such a function and make it known to your | |
| 2702 Emacs. The function @code{viper-surrounding-word} in @file{viper.el} can be | |
| 2703 used as a guiding example. | |
| 2704 | |
| 2705 @node Vi Macros, ,Viper Specials,Customization | |
| 2706 @section Vi Macros | |
| 2707 | |
| 2708 @cindex Vi macros | |
| 2709 | |
| 2710 Viper supports much enhanced Vi-style macros and also facilitates the use | |
| 2711 of Emacs-style macros. To define a temporary macro, it is generally more | |
| 2712 convenient to use Emacs keyboard macro facility. Emacs keyboard macros are | |
| 2713 usually defined anonymously, and the latest macro can be executed by typing | |
| 2714 @kbd{C-x e} (or @kbd{*}, if Viper is in Vi state). If you need to use several | |
| 2715 temporary macros, Viper lets you save them to a | |
| 2716 register (a lowercase letter); such macros can then be executed by typing | |
| 2717 @kbd{@@a} in Vi state (if a macro was previously saved in register | |
| 2718 @kbd{a}). | |
| 2719 @xref{Macros and Registers}, for details. | |
| 2720 | |
| 2721 If, however, you need to use a macro regularly, it must be given a | |
| 2722 permanent name and saved. Emacs manual explains how to do this, but | |
| 2723 invocation of named Emacs macros is quite different from Vi's. First, | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2724 invocation of permanent Emacs macros takes time because it requires typing |
|
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2725 too many keys (to a Vi user's taste, anyway). |
| 25829 | 2726 Second, binding such macros to function keys, for |
| 2727 fast access, hogs valuable real estate on the keyboard. | |
| 2728 | |
| 2729 Vi-style macros are better in that respect, since Vi lets the user overload | |
| 2730 the meaning of key sequences: keys typed in fast succession are treated | |
| 2731 specially, if this key sequence is bound to a macro. | |
| 2732 | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2733 Viper provides Vi-style keyboard macros through the usual Ex commands, |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
2734 @kbd{:map} and |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
2735 @kbd{:map!}. These macros are much more powerful in Viper than |
| 25829 | 2736 they are in the original Vi and in other emulators. This is because Viper |
| 2737 implements an enhanced vi-style | |
| 2738 interface to the powerful Emacs keyboard macro facility. | |
| 2739 | |
| 2740 First, any Emacs | |
| 2741 command can be executed while defining a macro, not just the Vi | |
| 2742 commands. In particular, the user can invoke Emacs commands via @kbd{M-x | |
| 2743 command-name} or by pressing various function keys on the keyboard. One | |
| 2744 can even use the mouse, although this is usually not useful and is not | |
| 2745 recommended (and macros defined with the use of the mouse cannot be saved in | |
| 2746 command history and in the startup file, for future use). | |
| 2747 | |
| 2748 Macros defined by mixing Vi and Emacs commands are represented as | |
| 2749 vectors. So, don't be confused when you see one (usually through the | |
| 2750 history of Ex commands). For instance, if @kbd{gg} is defined by typing | |
| 2751 @kbd{l}, the up-arrow key and @kbd{M-x next-line}, its definition will look | |
| 2752 as follows in Emacs: | |
| 2753 | |
| 2754 @example | |
| 2755 [l up (meta x) n e x t - l i n e return] | |
| 2756 @end example | |
| 2757 | |
| 2758 Second, Viper macros are defined in a WYSIWYG style. This means that | |
| 2759 commands are executed as you type them, so you can see precisely what is | |
| 2760 being defined. Third, macros can be bound to arbitrary sequences of keys, | |
| 2761 not just to printable keys. For instance, one can define a macro that will | |
| 2762 be invoked by hitting @kbd{f3} then @kbd{f2} function keys. (The keys | |
| 2763 @kbd{delete} and @kbd{backspace} are excluded; also, a macro invocation | |
| 2764 sequence can't start with @key{ESC}. Some other keys, such as @kbd{f1} and | |
| 2765 @kbd{help}, can't be bound to macros under Emacs, since they | |
| 2766 are bound in @code{key-translation-map}, which overrides any other binding | |
| 2767 the user gives to keys. In general, keys that have a binding in | |
| 2768 @code{key-translation-map} can't be bound to a macro.) | |
| 2769 | |
| 2770 Fourth, in Viper, one can define macros that are specific to a given | |
| 2771 buffer, a given major mode, or macros that are defined for all buffers. In | |
| 2772 fact, the same macro name can have several different definitions: one | |
| 2773 global, several definitions for various major modes, and | |
| 2774 definitions for various specific buffers. Buffer-specific definitions | |
| 2775 override mode-specific definitions, which, in turn, override global | |
| 2776 definitions. | |
| 2777 | |
| 2778 As if all that is not enough, Viper (through its interface to Emacs | |
| 2779 macros) lets the user define keyboard macros that ask for confirmation or | |
| 2780 even prompt the user for input and then continue. To do this, one should | |
| 2781 type @kbd{C-x q} (for confirmation) or @kbd{C-u C-x q} (for prompt). | |
|
53387
0ff1e2f3d2a9
(Vi Macros): Fix reference to the Emacs manual.
Eli Zaretskii <eliz@is.elta.co.il>
parents:
52979
diff
changeset
|
2782 For details, @pxref{Keyboard Macro Query,,Customization,emacs,The GNU Emacs |
| 25829 | 2783 Manual} @refill |
| 2784 | |
| 2785 When the user finishes defining a macro (which is done by typing @kbd{C-x)} --- | |
| 2786 a departure from Vi), you will be asked whether you want this | |
| 2787 macro to be global, mode-specific, or buffer-specific. You will also be | |
| 2788 given a chance to save the macro in your @file{~/.viper} file. | |
| 2789 This is the easiest way to save a macro and make | |
| 2790 it permanently available. If you work your startup files with bare hands, | |
| 2791 here is how Viper saves the above macro so that it will be | |
| 2792 available in Viper's Insert state (and Replace state) in buffer @code{my-buf} | |
| 2793 only: | |
| 2794 | |
| 2795 @example | |
| 2796 (viper-record-kbd-macro "gg" 'insert-state | |
| 2797 [l up (meta x) n e x t - l i n e return] | |
| 2798 "my-buf") | |
| 2799 @end example | |
| 2800 | |
| 2801 @noindent | |
| 2802 To do the same for Vi state and all buffers with the major mode | |
| 2803 @code{cc-mode}, use: | |
| 2804 | |
| 2805 @example | |
| 2806 (viper-record-kbd-macro "gg" 'vi-state | |
| 2807 [l up (meta x) n e x t - l i n e return] | |
| 2808 'cc-mode) | |
| 2809 @end example | |
| 2810 | |
| 2811 @noindent | |
| 2812 Both macro names and macro definitions are vectors of symbols that denote | |
| 2813 keys on the keyboard. Some keys, like @kbd{\}, @kbd{ }, or digit-keys must | |
| 2814 be escaped with a backslash. Modified keys are represented as lists. For | |
| 2815 instance, holding Meta and Control and pressing @kbd{f4} is represented as | |
| 2816 @kbd{(control meta f4)}. | |
| 2817 If all members of a vectors are printable characters (or sequences, such as | |
| 2818 @kbd{\e}, @kbd{\t}, for @key{ESC} and @key{TAB}), then they can also be represented as | |
| 2819 strings: | |
| 2820 | |
| 2821 @example | |
| 2822 (viper-record-kbd-macro "aa" 'vi-state "aaa\e" "my-buffer") | |
| 2823 @end example | |
| 2824 | |
| 2825 @noindent | |
| 2826 Thus, typing @kbd{aa} fast in Vi state will switch Viper to Insert state | |
| 2827 (due to the first @kbd{a}), insert @kbd{aa}, and then it will switch back to Vi | |
| 2828 state. All this will take effect only in the buffer named @code{my-buffer}. | |
| 2829 | |
| 2830 Note that the last argument to @code{viper-record-kbd-macro} must be either a | |
| 2831 string (a buffer name), a symbol representing a major mode, or @code{t}; | |
| 2832 the latter says that the macro is to be defined for all buffers | |
| 2833 (which is how macros are defined in original Vi). | |
| 2834 | |
| 2835 For convenience, Viper also lets you define Vi-style macros in its Emacs | |
| 2836 state. There is no Ex command, like @kbd{:map} and @kbd{:map!} for doing | |
| 2837 this, but the user can include such a macro in the @file{~/.viper} file. The | |
| 2838 only thing is that the @code{viper-record-kbd-macro} command should specify | |
| 2839 @code{emacs-state} instead of @code{vi-state} or @code{insert-state}. | |
| 2840 | |
| 2841 The user can get rid of a macro either by using the Ex commands @kbd{:unmap} | |
| 2842 and @kbd{:unmap!} or by issuing a call to @code{viper-unrecord-kbd-macro}. | |
| 2843 The latter is more powerful, since it can delete macros even in | |
| 2844 @code{emacs-state}. However, @code{viper-unrecord-kbd-macro} is usually | |
| 2845 needed only when the user needs to get rid of the macros that are already | |
| 2846 predefined in Viper. | |
| 2847 The syntax is: | |
| 2848 @findex @code{viper-unrecord-kbd-macro} | |
| 2849 @example | |
| 2850 (viper-unrecord-kbd-macro macro state) | |
| 2851 @end example | |
| 2852 @noindent | |
| 2853 The second argument must be @code{vi-state}, @code{insert-state}, or | |
| 2854 @code{emacs-state}. The first argument is a name of a macro. To avoid | |
| 2855 mistakes in specifying names of existing macros, type @kbd{M-x | |
| 2856 viper-describe-kbd-macros} and use a name from the list displayed by this | |
| 2857 command. | |
| 2858 | |
| 2859 If an error occurs during macro definition, Emacs | |
| 2860 aborts the process, and it must be repeated. This is analogous to Vi, | |
| 2861 except that in Vi the user doesn't know there is an error until the macro is | |
| 2862 actually run. All that means that in order for a definition to be | |
| 2863 successful, the user must do some simple planning of the process in | |
| 2864 advance, to avoid errors. For instance, if you want to map @kbd{gg} to | |
| 2865 @kbd{llll} in Vi state, you must make sure that there is enough room on the | |
| 2866 current line. Since @kbd{l} moves the cursor forward, it may signal an | |
| 2867 error on reaching the end of line, which will abort the definition. | |
| 2868 | |
| 2869 These precautions are necessary only when defining macros; they will help | |
| 2870 avoid the need to redo the job. When macros are actually run, an error | |
| 2871 during the execution will simply terminate the current execution | |
| 2872 (but the macro will remain mapped). | |
| 2873 | |
| 2874 A macro name can be a string of characters or a vector of keys. | |
| 2875 The latter makes it possible to define macros bound to, say, double-hits | |
| 2876 on a function key, such as @kbd{up} or @kbd{f13}. | |
| 2877 This is very useful if you run out of function keys on your keyboard; it | |
| 2878 makes Viper macro facility a @emph{keyboard doubler}, so to speak. | |
| 2879 | |
| 39267 | 2880 Elsewhere (@xref{Key Bindings}, for details), we review |
| 25829 | 2881 the standard Emacs mechanism for binding function keys to commands. |
| 2882 For instance, | |
| 2883 | |
| 2884 @example | |
| 2885 (global-set-key [f13] 'repeat-complex-command) | |
| 2886 @end example | |
| 2887 | |
| 2888 @noindent | |
| 2889 binds the key f13 to the Emacs function that repeats the last minibuffer | |
| 2890 command. Under Viper, however, you may still use this key for additional | |
| 2891 purposes, if you bind, say, a double-hitting action for that key to some | |
| 2892 other function. Emacs doesn't allow the user to do that, but Viper does | |
| 2893 this through its keyboard macro facility. To do this, type @kbd{:map } | |
| 2894 first. When you are asked to enter a macro name, hit f13 twice, followed by | |
| 2895 @key{RET} or @key{SPC}. | |
| 2896 | |
| 2897 Emacs will now start the mapping process by actually executing | |
| 2898 Vi and Emacs commands, so that you could see what will happen each time the | |
| 2899 macro is executed. Suppose now we wanted to bind the key sequence | |
| 2900 @kbd{f13 f13} to the command @code{eval-last-sexp}. To accomplish this, we | |
| 2901 can type @kbd{M-x eval-last-sexp} followed by @kbd{C-x )}. | |
| 2902 If you answer positively to Viper's offer to save this macro in @file{~/.viper} | |
| 2903 for future uses, the following will be inserted in that file: | |
| 2904 | |
| 2905 @example | |
| 2906 (viper-record-kbd-macro [f16 f16] 'vi-state | |
| 2907 [(meta x) e v a l - l a s t - s e x p] | |
| 2908 'lisp-interaction-mode) | |
| 2909 @end example | |
| 2910 | |
| 2911 To illustrate the above point, Viper provides two canned macros, which, by | |
| 2912 default, are bound to @kbd{[f12 \1]} and @kbd{[f12 \2]} (invoked by typing | |
| 2913 @kbd{f12} then @kbd{1} and @kbd{2}, respectively). These macros are useful | |
| 2914 shortcuts to Viper's command ring history. The first macro will execute the | |
| 2915 second-last destructive command (the last one is executed by @kbd{.}, as | |
| 2916 usual). The second macro executes the third-last command. | |
| 2917 | |
| 2918 If you need to go deeper into the command history, you will have to use | |
| 2919 other commands, as described earlier in this section; or you can bind, | |
| 2920 say, @kbd{f12 \3} like this: | |
| 2921 | |
| 2922 @example | |
| 2923 (viper-record-kbd-macro [f12 \3] 'vi-state | |
| 2924 [(meta x) r e p e a t - f r o m - h i s t o r y] | |
| 2925 t) | |
| 2926 @end example | |
| 2927 | |
| 2928 | |
| 2929 Note that even though the macro uses the function key @kbd{f12}, the key is | |
| 2930 actually free and can still be bound to some Emacs function via | |
| 2931 @code{define-key} or @code{global-set-key}. | |
| 2932 | |
| 2933 | |
| 2934 Viper allows the user to define macro names that are prefixes of other macros. | |
| 2935 For instance, one can define @kbd{[[} and @kbd{[[[[} to be macros. | |
| 2936 If you type the exact sequence of such keys and then pause, Viper will | |
| 2937 execute the right macro. However, if you don't pause and, say, type | |
| 2938 @kbd{[[[[text} then the conflict is resolved as follows. If only one of the | |
| 2939 key sequences, @kbd{[[} or @kbd{[[[[} has a definition applicable to the | |
| 2940 current buffer, then, in fact, there is no conflict and the right macro | |
| 2941 will be chosen. If both have applicable definitions, then the first one | |
| 2942 found will be executed. Usually this is the macro with a shorter name. So, | |
| 2943 in our case, @kbd{[[[[text} will cause the macro @kbd{[[} to be executed | |
| 2944 twice and then the remaining keys, @kbd{t e x t}, will be processed. | |
| 2945 | |
|
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2946 When defining macros using @kbd{:map} or @kbd{:map!}, the user enters |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2947 the actually keys to be used to invoke the macro. For instance, you |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2948 should hit the actual key @kbd{f6} if it is to be part of a macro |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2949 name; you do @emph{not} write @kbd{f 6}. When entering keys, Viper |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2950 displays them as strings or vectors (e.g., @code{"abc"} or @code{[f6 |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2951 f7 a]}). The same holds for unmapping. Hitting @key{TAB} while |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2952 typing a macro name in the @kbd{:unmap} or @kbd{:unmap!} command will |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2953 cause name completion. Completions are displayed as strings or |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2954 vectors. However, as before, you don't actually type @samp{"}, |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2955 @samp{[}, or @samp{]} that appear in the completions. These are |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2956 meta-symbols that indicate whether the corresponding macro name is a |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
2957 vector or a string. |
| 25829 | 2958 |
| 2959 One last difference from Vi: Vi-style keyboard macros cannot be defined in | |
| 2960 terms of other Vi-style keyboard macros (but named Emacs macros are OK). | |
| 2961 More precisely, while defining or executing a macro, the special meaning | |
| 2962 of key sequences (as Vi macros) is ignored. | |
| 2963 This is because it is all too easy to create an infinite loop in this way. | |
| 2964 Since Viper macros are much more powerful than Vi's it is impossible to | |
| 2965 detect such loops. In practice, this is not really a limitation but, | |
| 2966 rather, a feature. | |
| 2967 | |
| 2968 We should also note that Vi macros are disabled in the Minibuffer, which | |
| 2969 helps keep some potential troubles away. | |
| 2970 | |
| 2971 The rate at which the user must type keys in order for them to be | |
| 2972 recognized as a timeout macro is controlled by the variable | |
| 2973 @code{viper-fast-keyseq-timeout}, which defaults to 200 milliseconds. | |
| 2974 | |
| 2975 For the most part, Viper macros defined in @file{~/.viper} can be shared | |
| 2976 between X and TTY modes. | |
| 2977 The problem with TTY may be that the function keys there generate sequences | |
| 2978 of events instead of a single event (as under a window system). | |
| 2979 Emacs maps some of these sequences back to the logical keys | |
| 2980 (e.g., the sequences generated by the arrow keys are mapped to @kbd{up}, | |
| 2981 @kbd{left}, etc.). However, not all function keys are mapped in this way. | |
| 2982 Macros that are bound to key sequences that contain such unmapped function | |
| 2983 keys have to be redefined for TTY's (and possibly for every type of TTY you | |
| 2984 may be using). To do this, start Emacs on an appropriate TTY device and | |
| 2985 define the macro using @kbd{:map}, as usual. | |
| 2986 | |
| 2987 @findex @code{viper-describe-kbd-macros} | |
| 2988 Finally, Viper provides a function that conveniently displays all macros | |
| 2989 currently defined. To see all macros along with their definitions, type | |
| 2990 @kbd{M-x viper-describe-kbd-macros}. | |
| 2991 | |
| 2992 @node Commands,,Customization,Top | |
| 2993 @chapter Commands | |
| 2994 | |
| 2995 This section is a semi-automatically bowdlerized version of the Vi | |
| 2996 reference created by @* @samp{maart@@cs.vu.nl} and others. It can be | |
| 2997 found on the Vi archives. This reference has been adapted for Viper.@refill | |
| 2998 | |
| 2999 @menu | |
| 3000 * Groundwork:: Textual Conventions and Viper basics | |
| 3001 * Text Handling:: Moving, Editing, Undoing. | |
| 3002 * Display:: Scrolling. | |
| 3003 * File and Buffer Handling:: Editing, Writing and Quitting. | |
| 3004 * Mapping:: Mapping Keys, Keyboard Macros | |
| 3005 * Shell Commands:: Accessing Shell Commands, Processing Text | |
| 3006 * Options:: Ex options, the @kbd{:set} commands | |
| 3007 * Emacs Related Commands:: Meta Keys, Windows | |
| 3008 * Mouse-bound Commands:: Search and insertion of text | |
| 3009 @end menu | |
| 3010 | |
| 3011 @node Groundwork, Text Handling, Commands, Commands | |
| 3012 @comment node-name, next, previous, up | |
| 3013 @section Groundwork | |
| 3014 | |
| 3015 The VI command set is based on the idea of combining motion commands | |
| 3016 with other commands. The motion command is used as a text region | |
| 3017 specifier for other commands. | |
| 3018 We classify motion commands into @dfn{point commands} and | |
| 3019 @dfn{line commands}.@refill | |
| 3020 | |
| 3021 @cindex point commands | |
| 3022 | |
| 3023 The point commands are: | |
| 3024 | |
| 3025 @quotation | |
| 3026 @kbd{h}, @kbd{l}, @kbd{0}, @kbd{$}, @kbd{w}, @kbd{W}, @kbd{b}, @kbd{B}, | |
| 3027 @kbd{e}, @kbd{E}, @kbd{(}, @kbd{)}, @kbd{/}, @kbd{?}, @kbd{`}, @kbd{f}, | |
| 3028 @kbd{F}, @kbd{t}, @kbd{T}, @kbd{%}, @kbd{;}, @kbd{,}, @kbd{^} | |
| 3029 @end quotation | |
| 3030 | |
| 3031 @cindex line commands | |
| 3032 | |
| 3033 The line commands are: | |
| 3034 | |
| 3035 @quotation | |
| 3036 @kbd{j}, @kbd{k}, @kbd{+}, @kbd{-}, @kbd{H}, @kbd{M}, @kbd{L}, @kbd{@{}, | |
| 3037 @kbd{@}}, @kbd{G}, @kbd{'}, @kbd{[[}, @kbd{]]}, @kbd{[]} | |
| 3038 @end quotation | |
| 3039 @noindent | |
| 3040 | |
| 3041 Text Deletion Commands (@pxref{Deleting Text}), Change commands | |
| 3042 (@pxref{Changing Text}), even Shell Commands (@pxref{Shell Commands}) | |
| 3043 use these commands to describe a region of text to operate on. | |
| 3044 | |
| 3045 @cindex r and R region specifiers | |
| 3046 | |
| 3047 Viper adds two region descriptors, @kbd{r} and @kbd{R}. These describe | |
| 3048 the Emacs regions (@pxref{Basics}), but they are not movement commands. | |
| 3049 | |
| 3050 The command description uses angle brackets @samp{<>} to indicate | |
| 3051 metasyntactic variables, since the normal conventions of using simple | |
| 3052 text can be confusing with Viper where the commands themselves are | |
| 3053 characters. Watch out where @kbd{<} shift commands and @kbd{<count>} are | |
| 3054 mentioned together!!! | |
| 3055 | |
| 3056 @kindex <move> | |
| 3057 @kindex <a-z> | |
| 3058 @kindex <address> | |
| 3059 @cindex <move> | |
| 3060 @cindex <a-z> | |
| 3061 @cindex <address> | |
| 3062 @cindex movements | |
| 3063 | |
| 3064 @samp{<move>} refers to the above movement commands, and @samp{<a-z>} | |
| 3065 refers to registers or textmarkers from @samp{a} to @samp{z}. Note | |
| 3066 that the @samp{<move>} is described by full move commands, that is to | |
| 3067 say they will take counts, and otherwise behave like normal move commands. | |
| 3068 @cindex Ex addresses | |
| 3069 @samp{<address>} refers to Ex line addresses, which include | |
| 3070 | |
| 3071 @table @kbd | |
| 3072 @item .@: <No address> | |
| 3073 Current line | |
| 3074 @item .+n .-n | |
| 3075 Add or subtract for current line | |
| 3076 @item number | |
| 3077 Actual line number, use @kbd{.=} to get the line number | |
| 3078 @item '<a-z> | |
| 3079 Textmarker | |
| 3080 @item $ | |
| 3081 Last line | |
| 3082 @item x,y | |
| 3083 Where x and y are one of the above | |
| 3084 @item % | |
| 3085 @cindex % (Ex address) | |
| 3086 For the whole file, same as (1,$). | |
| 3087 @item /<pat>/ | |
| 3088 @itemx ?<pat>? | |
| 3089 Next or previous line with pattern <pat>. | |
| 3090 | |
| 3091 Note that the pattern is allowed to contain newline character (inserted as | |
| 3092 @kbd{C-qC-j}). Therefore, one can search for patterns that span several | |
| 3093 lines. | |
| 3094 @end table | |
| 3095 | |
| 3096 @cindex % (Current file) | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3097 Note that @samp{%} is used in Ex commands @kbd{:e} and @kbd{:r <shell-cmd>} |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3098 to mean current file. If you want a @samp{%} in your command, it must be |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3099 escaped as @samp{\%}. Note that @kbd{:w} and the regular @kbd{:r <file>} |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3100 command doesn't support the meta symbols @samp{%} and @samp{#}, because |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3101 file history is a better mechanism. |
| 25829 | 3102 @cindex # (Previous file) |
| 3103 Similarly, @samp{#} expands to the previous file. The previous file is | |
| 3104 the first file in @kbd{:args} listing. This defaults to previous window | |
| 3105 in the VI sense if you have one window only. | |
| 3106 | |
| 3107 @kindex <args> | |
| 3108 @kindex <cmd> | |
| 3109 @cindex <args> | |
| 3110 @cindex <cmd> | |
| 3111 @noindent | |
| 3112 Others like @samp{<args> -- arguments}, @samp{<cmd> -- command} etc. | |
| 3113 should be fairly obvious. | |
| 3114 | |
| 3115 @noindent | |
| 3116 Common characters referred to include: | |
| 3117 | |
| 3118 @table @kbd | |
| 3119 @item <sp> | |
| 3120 Space | |
| 3121 @item <ht> | |
| 3122 Tab | |
| 3123 @item <lf> | |
| 3124 Linefeed | |
| 3125 @item <esc> | |
| 3126 Escape | |
| 3127 @item <cr> | |
| 3128 Return, Enter | |
| 3129 @end table | |
| 3130 @cindex <cr> | |
| 3131 @cindex <esc> | |
| 3132 @cindex <lf> | |
| 3133 @cindex <ht> | |
| 3134 @cindex <sp> | |
| 3135 | |
| 3136 @cindex words | |
| 3137 @cindex WORDS | |
| 3138 @cindex char | |
| 3139 @cindex CHAR | |
| 3140 | |
| 3141 We also use @samp{word} for alphanumeric/non-alphanumeric words, and | |
| 3142 @samp{WORD} for whitespace delimited words. @samp{char} refers to any | |
|
52979
3649390c0f91
Replace @sc{ascii} and ASCII with @acronym{ASCII}.
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
3143 @acronym{ASCII} character, @samp{CHAR} to non-whitespace character. |
| 25829 | 3144 Brackets @samp{[]} indicate optional parameters; @samp{<count>} also |
| 3145 optional, usually defaulting to 1. Brackets are elided for | |
| 3146 @samp{<count>} to eschew obfuscation. | |
| 3147 | |
| 3148 Viper's idea of Vi's words is slightly different from Vi. First, Viper | |
| 3149 words understand Emacs symbol tables. Therefore, all symbols declared to be | |
| 3150 alphanumeric in a symbol table can automatically be made part of the Viper | |
| 3151 word. This is useful when, for instance, editing text containing European, | |
| 3152 Cyrillic, Japanese, etc., texts. | |
| 3153 | |
| 3154 Second, Viper lets you depart from Vi's idea of a word by changing the a | |
| 3155 syntax preference via the customization widget (the variable | |
| 3156 @code{viper-syntax-preference}) or by executing | |
| 3157 @code{viper-set-syntax-preference} interactively. | |
| 3158 | |
| 3159 By default, Viper syntax preference is @code{reformed-vi}, which means that | |
| 3160 Viper considers only those symbols to be part of a word that are specified | |
| 3161 as word-symbols by the current Emacs syntax table (which may be different | |
| 3162 for different major modes) plus the underscore symbol @kbd{_}, minus the | |
| 3163 symbols that are not considered words in Vi (e.g., `,',;, etc.), but may be | |
| 3164 considered as word-symbols by various Emacs major modes. Reformed-Vi works | |
| 3165 very close to Vi, and it also recognizes words in other | |
| 3166 alphabets. Therefore, this is the most appropriate mode for editing text | |
| 3167 and is likely to fit all your needs. | |
| 3168 | |
| 3169 You can also set Viper syntax preference to @code{strict-vi}, which would | |
| 3170 cause Viper to view all non-English letters as non-word-symbols. | |
| 3171 | |
| 3172 You can also specify @code{emacs} as your preference, which would | |
| 3173 make Viper use exactly the same notion of a word as Emacs does. In | |
| 3174 particular, the underscore may not be part of a word in some major modes. | |
| 3175 | |
| 3176 Finally, if @code{viper-syntax-preference} is set to @code{extended}, Viper | |
| 3177 words would consist of characters that are classified as alphanumeric | |
| 3178 @emph{or} as parts of symbols. This is convenient for editing programs. | |
| 3179 | |
| 3180 @code{viper-syntax-preference} is a local variable, so it can have different | |
| 3181 values for different major modes. For instance, in programming modes it can | |
| 3182 have the value @code{extended}. In text modes where words contain special | |
| 3183 characters, such as European (non-English) letters, Cyrillic letters, etc., | |
| 3184 the value can be @code{reformed-vi} or @code{emacs}. | |
| 3185 If you consider using different syntactic preferences for different major | |
| 3186 modes, you should execute, for example, | |
| 3187 | |
| 3188 @example | |
| 3189 (viper-set-syntax-preference nil "extended") | |
| 3190 @end example | |
| 3191 | |
| 3192 in the appropriate major mode hooks. | |
| 3193 | |
| 3194 @vindex @code{viper-syntax-preference} | |
| 3195 @findex @code{viper-set-syntax-preference} | |
| 3196 @cindex syntax table | |
| 3197 | |
| 3198 | |
| 3199 | |
| 3200 The above discussion concerns only the movement commands. In regular | |
| 3201 expressions, words remain the same as in Emacs. That is, the expressions | |
| 3202 @code{\w}, @code{\>}, @code{\<}, etc., use Emacs' idea of what is a word, | |
| 3203 and they don't look into the value of variable | |
| 3204 @code{viper-syntax-preference}. This is because Viper avoids changing | |
| 3205 syntax tables in order to not thwart the various major modes that set these | |
| 3206 tables. | |
| 3207 | |
| 3208 The usual Emacs convention is used to indicate Control Characters, i.e | |
|
39901
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3209 C-h for Control-h. @emph{Do not confuse this with a sequence of separate |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3210 characters |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3211 C, -, h!!!} The @kbd{^} is itself, never used to indicate a |
| 25829 | 3212 Control character. |
| 3213 | |
| 3214 Finally, we note that Viper's Ex-style commands can be made to work on the | |
| 3215 current Emacs region. This is done by typing a digit argument before | |
| 3216 @kbd{:}. For instance, typing @kbd{1:} will propmt you with something like | |
| 3217 @emph{:123,135}, assuming that the current region starts at line 123 and | |
| 3218 ends at line 135. There is no need to type the line numbers, since Viper | |
| 3219 inserts them automatically in front of the Ex command. | |
| 3220 @cindex Ex commands | |
| 3221 | |
| 3222 @node Text Handling, Display, Groundwork, Commands | |
| 3223 @section Text Handling | |
| 3224 | |
| 3225 @menu | |
| 3226 * Move Commands:: Moving, Searching | |
| 3227 * Marking:: Textmarkers in Viper and the Emacs Mark. | |
| 3228 * Appending Text:: Text insertion, Shifting, Putting | |
| 3229 * Editing in Insert State:: Autoindent, Quoting etc. | |
| 3230 * Deleting Text:: Deleting | |
| 3231 * Changing Text:: Changing, Replacement, Joining | |
| 3232 * Search and Replace:: Searches, Query Replace, Pattern Commands | |
| 3233 * Yanking:: Yanking, Viewing Registers | |
| 3234 * Undoing:: Multiple Undo, Backups | |
| 3235 @end menu | |
| 3236 | |
| 3237 @node Move Commands,Marking,,Text Handling | |
| 3238 @subsection Move Commands | |
| 3239 | |
| 3240 @cindex movement commands | |
| 3241 @cindex searching | |
| 3242 @cindex textmarkers | |
| 3243 @cindex markers | |
| 3244 @cindex column movement | |
| 3245 @cindex paragraphs | |
| 3246 @cindex headings | |
| 3247 @cindex sections | |
| 3248 @cindex sentences | |
| 3249 @cindex matching parens | |
| 3250 @cindex paren matching | |
| 3251 | |
| 3252 @table @kbd | |
| 3253 @item <count> h C-h | |
| 3254 <count> chars to the left. | |
| 3255 @item <count> j <lf> C-n | |
| 3256 <count> lines downward. | |
| 3257 @item <count> l <sp> | |
| 3258 <count> chars to the right. | |
| 3259 @item <count> k C-p | |
| 3260 <count> lines upward. | |
| 3261 @item <count> $ | |
| 3262 To the end of line <count> from the cursor. | |
| 3263 @item <count> ^ | |
| 3264 To the first CHAR <count> - 1 lines lower. | |
| 3265 @item <count> - | |
| 3266 To the first CHAR <count> lines higher. | |
| 3267 @item <count> + <cr> | |
| 3268 To the first CHAR <count> lines lower. | |
| 3269 @item 0 | |
| 3270 To the first char of the line. | |
| 3271 @item <count> | | |
| 3272 To column <count> | |
| 3273 @item <count> f<char> | |
| 3274 <count> <char>s to the right (find). | |
| 3275 @item <count> t<char> | |
| 3276 Till before <count> <char>s to the right. | |
| 3277 @item <count> F<char> | |
| 3278 <count> <char>s to the left. | |
| 3279 @item <count> T<char> | |
| 3280 Till after <count> <char>s to the left. | |
| 3281 @item <count> ; | |
| 3282 Repeat latest @kbd{f t F T} <count> times. | |
| 3283 @item <count> , | |
| 3284 Repeat latest @kbd{f t F T} | |
| 3285 <count> times in opposite direction. | |
| 3286 @item <count> w | |
| 3287 <count> words forward. | |
| 3288 @item <count> W | |
| 3289 <count> WORDS forward. | |
| 3290 @item <count> b | |
| 3291 <count> words backward. | |
| 3292 @item <count> B | |
| 3293 <count> WORDS backward. | |
| 3294 @item <count> e | |
| 3295 To the end of word <count> forward. | |
| 3296 @item <count> E | |
| 3297 To the end of WORD <count> forward. | |
| 3298 @item <count> G | |
| 3299 Go to line <count> (default end-of-file). | |
| 3300 @item <count> H | |
| 3301 To line <count> from top of the screen (home). | |
| 3302 @item <count> L | |
| 3303 To line <count> from bottom of the screen (last). | |
| 3304 @item M | |
| 3305 To the middle line of the screen. | |
| 3306 @item <count> ) | |
| 3307 <count> sentences forward. | |
| 3308 @item <count> ( | |
| 3309 <count> sentences backward. | |
| 3310 @item <count> @} | |
| 3311 <count> paragraphs forward. | |
| 3312 @item <count> @{ | |
| 3313 <count> paragraphs backward. | |
| 3314 @item <count> ]] | |
| 3315 To the <count>th heading. | |
| 3316 @item <count> [[ | |
| 3317 To the <count>th previous heading. | |
| 3318 @item <count> [] | |
| 3319 To the end of <count>th heading. | |
| 3320 @item m<a-z> | |
| 3321 Mark the cursor position with a letter. | |
| 3322 @item `<a-z> | |
| 3323 To the mark. | |
| 3324 @item '<a-z> | |
| 3325 To the first CHAR of the line with the mark. | |
| 3326 @item [<a-z> | |
| 3327 Show contents of textmarker. | |
| 3328 @item ]<a-z> | |
| 3329 Show contents of register. | |
| 3330 @item `` | |
| 3331 To the cursor position before the latest absolute | |
| 3332 jump (of which are examples @kbd{/} and @kbd{G}). | |
| 3333 @item '' | |
| 3334 To the first CHAR of the line on which the cursor | |
| 3335 was placed before the latest absolute jump. | |
| 3336 @item <count> /<string> | |
| 3337 To the <count>th occurrence of <string>. | |
| 3338 @item <count> /<cr> | |
| 3339 To the <count>th occurrence of <string> from previous @kbd{/ or ?}. | |
| 3340 @item <count> ?<string> | |
| 3341 To the <count>th previous occurrence of <string>. | |
| 3342 @item <count> ?<cr> | |
| 3343 To the <count>th previous occurrence of <string> from previous @kbd{?@: or /}. | |
| 3344 @item n | |
| 3345 Repeat latest @kbd{/} @kbd{?} (next). | |
| 3346 @item N | |
| 3347 Repeat latest search in opposite direction. | |
| 3348 @item C-c / | |
| 3349 Without a prefix argument, this command toggles | |
| 3350 case-sensitive/case-insensitive search modes and plain vanilla/regular | |
| 3351 expression search. With the prefix argument 1, i.e., | |
| 3352 @kbd{1 C-c /}, this toggles case-sensitivity; with the prefix argument 2, | |
| 3353 toggles plain vanilla search and search using | |
| 3354 regular expressions. @xref{Viper Specials}, for alternative ways to invoke | |
| 3355 this function. | |
| 3356 @cindex vanilla search | |
| 3357 @cindex case-sensitive search | |
| 3358 @cindex case-insensitive search | |
| 3359 @item % | |
| 3360 Find the next bracket/parenthesis/brace and go to its match. | |
| 3361 By default, Viper ignores brackets/parentheses/braces that occur inside | |
| 3362 parentheses. You can change this by setting | |
|
56279
b1ae5333057a
* ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
Jesper Harder <harder@ifa.au.dk>
parents:
55201
diff
changeset
|
3363 @code{viper-parse-sexp-ignore-comments} to @code{nil} in your @file{.viper} file. |
| 25829 | 3364 This option can also be toggled interactively if you quickly hit @kbd{%%%}. |
| 3365 | |
| 3366 This latter feature is implemented as a vi-style keyboard macro. If you | |
| 3367 don't want this macro, put | |
| 3368 | |
| 3369 @example | |
| 3370 (viper-set-parsing-style-toggling-macro 'undefine) | |
| 3371 @end example | |
| 3372 @findex @code{viper-set-parsing-style-toggling-macro} | |
| 3373 | |
| 3374 in your @file{~/.viper} file. | |
| 3375 | |
| 3376 @end table | |
| 3377 @kindex @kbd{%} | |
| 3378 @kindex @kbd{C-c /} | |
| 3379 @kindex @kbd{N} | |
| 3380 @kindex @kbd{n} | |
| 3381 @kindex @kbd{?<cr>} | |
| 3382 @kindex @kbd{/<cr>} | |
| 3383 @kindex @kbd{?<string>} | |
| 3384 @kindex @kbd{/<string>} | |
| 3385 @kindex @kbd{''} | |
| 3386 @kindex @kbd{``} | |
| 3387 @kindex @kbd{]<a-z>} | |
| 3388 @kindex @kbd{[<a-z>} | |
| 3389 @kindex @kbd{'<a-z>} | |
| 3390 @kindex @kbd{`<a-z>} | |
| 3391 @kindex @kbd{m<a-z>} | |
| 3392 @kindex @kbd{[]} | |
| 3393 @kindex @kbd{[[} | |
| 3394 @kindex @kbd{]]} | |
| 3395 @kindex @kbd{@{} | |
| 3396 @kindex @kbd{@}} | |
| 3397 @kindex @kbd{(} | |
| 3398 @kindex @kbd{)} | |
| 3399 @kindex @kbd{M} | |
| 3400 @kindex @kbd{L} | |
| 3401 @kindex @kbd{H} | |
| 3402 @kindex @kbd{G} | |
| 3403 @kindex @kbd{E} | |
| 3404 @kindex @kbd{e} | |
| 3405 @kindex @kbd{B} | |
| 3406 @kindex @kbd{b} | |
| 3407 @kindex @kbd{W} | |
| 3408 @kindex @kbd{w} | |
| 3409 @kindex @kbd{,} | |
| 3410 @kindex @kbd{;} | |
| 3411 @kindex @kbd{T<char>} | |
| 3412 @kindex @kbd{F<char>} | |
| 3413 @kindex @kbd{t<char>} | |
| 3414 @kindex @kbd{f<char>} | |
| 3415 @kindex @kbd{|} | |
| 3416 @kindex @kbd{0} | |
| 3417 @kindex @kbd{<cr>} | |
| 3418 @kindex @kbd{+} | |
| 3419 @kindex @kbd{-} | |
| 3420 @kindex @kbd{^} | |
| 3421 @kindex @kbd{$} | |
| 3422 @kindex @kbd{C-p} | |
| 3423 @kindex @kbd{<lf>} | |
| 3424 @kindex @kbd{<sp>} | |
| 3425 @kindex @kbd{C-n} | |
| 3426 @kindex @kbd{C-h} | |
| 3427 @kindex @kbd{h} | |
| 3428 @kindex @kbd{j} | |
| 3429 @kindex @kbd{k} | |
| 3430 @kindex @kbd{l} | |
| 3431 @vindex @code{viper-parse-sexp-ignore-comments} | |
| 3432 | |
| 3433 @node Marking,Appending Text,Move Commands,Text Handling | |
| 3434 @subsection Marking | |
| 3435 | |
| 3436 Emacs mark is referred to in the region specifiers @kbd{r} and @kbd{R}. | |
| 3437 @xref{Emacs Preliminaries}, and @xref{Basics}, for explanation. Also | |
| 3438 see @ref{Mark,,Mark,emacs,The GNU Emacs manual}, for an explanation of | |
| 3439 the Emacs mark ring. | |
| 3440 | |
| 3441 @cindex marking | |
| 3442 | |
| 3443 @table @kbd | |
| 3444 @item m<a-z> | |
| 3445 Mark the current file and position with the specified letter. | |
| 3446 @item m . | |
| 3447 Set the Emacs mark (@pxref{Emacs Preliminaries}) at point. | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3448 @item m ^ |
|
26490
2b08d829af86
Fix complaints from makeinfo 4.0.
Eli Zaretskii <eliz@gnu.org>
parents:
26263
diff
changeset
|
3449 Set the Emacs mark (@pxref{Emacs Preliminaries}) back to where it was last |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3450 set with the @kbd{m.} command. This is useful when you set the mark with |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3451 @kbd{m.}, but then some other command (such as @kbd{L} or @kbd{G}) changes |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3452 it in a way that you didn't like. |
| 25829 | 3453 @item m < |
| 3454 Set the Emacs mark at beginning of buffer. | |
| 3455 @item m > | |
| 3456 Set the Emacs mark at end of buffer. | |
| 3457 @item m , | |
| 3458 Jump to the Emacs mark. | |
| 3459 @item :mark <char> | |
| 3460 Mark position with text marker named <char>. This is an Ex command. | |
| 3461 @item :k <char> | |
| 3462 Same as @kbd{:mark}. | |
| 3463 @item `` | |
| 3464 Exchange point and mark. | |
| 3465 @item '' | |
| 3466 Exchange point and mark and go to the first CHAR on line. | |
| 3467 @item '<a-z> | |
| 3468 Go to specified Viper mark. | |
| 3469 @item | |
| 3470 Go to specified Viper mark and go to the first CHAR on line. | |
| 3471 @end table | |
| 3472 @kindex @kbd{m<a-z>} | |
| 3473 @kindex @kbd{m.} | |
| 3474 @kindex @kbd{m>} | |
| 3475 @kindex @kbd{m<} | |
| 3476 @kindex @kbd{m,} | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3477 @kindex @kbd{m^} |
| 25829 | 3478 @findex @kbd{:mark} |
| 3479 @findex @kbd{:k} | |
| 3480 @kindex @kbd{''} | |
| 3481 @kindex @kbd{``} | |
| 3482 @kindex @kbd{`<a-z>} | |
| 3483 @kindex @kbd{'<a-z>} | |
| 3484 | |
| 3485 @node Appending Text, Editing in Insert State, Marking,Text Handling | |
| 3486 @subsection Appending Text | |
| 3487 | |
| 3488 @xref{Options}, to see how to change tab and shiftwidth size. See the GNU | |
| 3489 Emacs manual, or try @kbd{C-ha tabs} (If you have turned Emacs help on). | |
| 3490 Check out the variable @code{indent-tabs-mode} to put in just spaces. | |
| 3491 Also see options for word-wrap. | |
| 3492 | |
| 3493 @cindex inserting | |
| 3494 @cindex appending | |
| 3495 @cindex paste | |
| 3496 @cindex put | |
| 3497 | |
| 3498 @table @kbd | |
| 3499 @item <count> a | |
| 3500 <count> times after the cursor. | |
| 3501 @item <count> A | |
| 3502 <count> times at the end of line. | |
| 3503 @item <count> i | |
| 3504 <count> times before the cursor (insert). | |
| 3505 @item <count> I | |
| 3506 <count> times before the first CHAR of the line | |
| 3507 @item <count> o | |
| 3508 On a new line below the current (open). | |
| 3509 The count is only useful on a slow terminal. | |
| 3510 @item <count> O | |
| 3511 On a new line above the current. | |
| 3512 The count is only useful on a slow terminal. | |
| 3513 @item <count> ><move> | |
| 3514 Shift the lines described by <count><move> one | |
| 3515 shiftwidth to the right (layout!). | |
| 3516 @item <count> >> | |
| 3517 Shift <count> lines one shiftwidth to the right. | |
| 3518 @item <count> ["<a-z1-9>]p | |
| 3519 Put the contents of the (default undo) buffer | |
| 3520 <count> times after the cursor. The register will | |
| 3521 be automatically down-cased. | |
| 3522 @item <count> ["<a-z1-9>]P | |
| 3523 Put the contents of the (default undo) buffer | |
| 3524 <count> times before the cursor. The register will | |
| 3525 @item [<a-z> | |
| 3526 Show contents of textmarker. | |
| 3527 @item ]<a-z> | |
| 3528 Show contents of register. | |
| 3529 @item <count> . | |
| 3530 Repeat previous command <count> times. For destructive | |
| 3531 commands as well as undo. | |
| 3532 @item f1 1 and f1 2 | |
| 3533 While @kbd{.} repeats the last destructive command, | |
| 3534 these two macros repeat the second-last and the third-last destructive | |
| 3535 commands. @xref{Vi Macros}, for more information on Vi macros. | |
| 3536 @item C-c M-p and C-c M-n | |
| 3537 In Vi state, | |
| 3538 these commands help peruse the history of Vi's destructive commands. | |
| 3539 Successive typing of @kbd{C-c M-p} causes Viper to search the history in | |
| 3540 the direction | |
| 3541 of older commands, while hitting @kbd{C-c M-n} does so in reverse | |
| 3542 order. Each command in the history is displayed in the Minibuffer. The | |
| 3543 displayed command can | |
| 3544 then be executed by typing `@kbd{.}'. | |
| 3545 | |
| 3546 Since typing the above sequences of keys may be tedious, the | |
| 3547 functions doing the perusing can be bound to unused keyboard keys in the | |
| 3548 @file{~/.viper} file. @xref{Viper Specials}, for details. | |
| 3549 @end table | |
| 3550 @kindex @kbd{C-c M-p} | |
| 3551 @kindex @kbd{C-c M-n} | |
| 3552 @kindex @kbd{.} | |
| 3553 @kindex @kbd{]<a-z>} | |
| 3554 @kindex @kbd{[<a-z>} | |
| 3555 @kindex @kbd{P} | |
| 3556 @kindex @kbd{p} | |
| 3557 @kindex @kbd{"<a-z1-9>p} | |
| 3558 @kindex @kbd{"<a-z1-9>P} | |
| 3559 @kindex @kbd{>>} | |
| 3560 @kindex @kbd{><move>} | |
| 3561 @kindex @kbd{O} | |
| 3562 @kindex @kbd{o} | |
| 3563 @kindex @kbd{i} | |
| 3564 @kindex @kbd{A} | |
| 3565 @kindex @kbd{a} | |
| 3566 | |
| 3567 @node Editing in Insert State, Deleting Text, Appending Text,Text Handling | |
| 3568 @subsection Editing in Insert State | |
| 3569 | |
| 3570 Minibuffer can be edited similarly to Insert state, and you can switch | |
| 3571 between Insert/Replace/Vi states at will. | |
| 3572 Some users prefer plain Emacs feel in the Minibuffer. To this end, set | |
| 3573 @var{viper-vi-style-in-minibuffer} to @code{nil}. | |
| 3574 | |
| 3575 @cindex Insert state | |
| 3576 | |
| 3577 @table @kbd | |
| 3578 @item C-v | |
| 3579 Deprive the next char of its special meaning (quoting). | |
| 3580 @item C-h | |
| 3581 One char back. | |
| 3582 @item C-w | |
| 3583 One word back. | |
| 3584 @item C-u | |
| 3585 Back to the begin of the change on the | |
| 3586 current line. | |
| 3587 | |
| 3588 @end table | |
| 3589 @kindex @kbd{C-u} | |
| 3590 @kindex @kbd{C-w} | |
| 3591 @kindex @kbd{C-v} | |
| 3592 | |
| 3593 @node Deleting Text, Changing Text, Editing in Insert State, Text Handling | |
| 3594 @subsection Deleting Text | |
| 3595 | |
| 3596 | |
| 3597 There is one difference in text deletion that you should be | |
| 3598 aware of. This difference comes from Emacs and was adopted in Viper | |
| 3599 because we find it very useful. In Vi, if you delete a line, say, and then | |
| 3600 another line, these two deletions are separated and are put back | |
| 3601 separately if you use the @samp{p} command. In Emacs (and Viper), successive | |
| 3602 series of deletions that are @emph{not interrupted} by other commands are | |
| 3603 lumped together, so the deleted text gets accumulated and can be put back | |
| 3604 as one chunk. If you want to break a sequence of deletions so that the | |
| 3605 newly deleted text could be put back separately from the previously deleted | |
| 3606 text, you should perform a non-deleting action, e.g., move the cursor one | |
| 3607 character in any direction. | |
| 3608 | |
| 3609 @cindex shifting text | |
| 3610 | |
| 3611 @table @kbd | |
| 3612 @item <count> x | |
| 3613 Delete <count> chars under and after the cursor. | |
| 3614 @item <count> X | |
| 3615 Delete <count> chars before the cursor. | |
| 3616 @item <count> d<move> | |
| 3617 Delete from point to endpoint of <count><move>. | |
| 3618 @item <count> dd | |
| 3619 Delete <count> lines. | |
| 3620 @item D | |
| 3621 The rest of the line. | |
| 3622 @item <count> <<move> | |
| 3623 Shift the lines described by <count><move> one | |
| 3624 shiftwidth to the left (layout!). | |
| 3625 @item <count> << | |
| 3626 Shift <count> lines one shiftwidth to the left. | |
| 3627 @end table | |
| 3628 @kindex @kbd{<<} | |
| 3629 @kindex @kbd{<<move>} | |
| 3630 @kindex @kbd{D} | |
| 3631 @kindex @kbd{dd} | |
| 3632 @kindex @kbd{d<move>} | |
| 3633 @kindex @kbd{X} | |
| 3634 @kindex @kbd{x} | |
| 3635 | |
| 3636 @node Changing Text, Search and Replace, Deleting Text,Text Handling | |
| 3637 @subsection Changing Text | |
| 3638 | |
| 3639 @cindex joining lines | |
| 3640 @cindex changing case | |
| 3641 @cindex quoting regions | |
| 3642 @cindex substitution | |
| 3643 | |
| 3644 @table @kbd | |
| 3645 @item <count> r<char> | |
| 3646 Replace <count> chars by <char> - no <esc>. | |
| 3647 @item <count> R | |
| 3648 Overwrite the rest of the line, | |
| 3649 appending change @var{count - 1} times. | |
| 3650 @item <count> s | |
| 3651 Substitute <count> chars. | |
| 3652 @item <count> S | |
| 3653 Change <count> lines. | |
| 3654 @item <count> c<move> | |
| 3655 Change from begin to endpoint of <count><move>. | |
| 3656 @item <count> cc | |
| 3657 Change <count> lines. | |
| 3658 @item <count> C | |
| 3659 The rest of the line and <count> - 1 next lines. | |
| 3660 @item <count> =<move> | |
| 3661 Reindent the region described by move. | |
| 3662 @item <count> ~ | |
| 3663 Switch lower and upper cases. | |
| 3664 @item <count> J | |
| 3665 Join <count> lines (default 2). | |
| 3666 @item :[x,y]s/<pat>/<repl>/<f> | |
| 3667 Substitute (on lines x through y) the pattern | |
| 3668 <pat> (default the last pattern) with <repl>. Useful | |
| 3669 flags <f> are @samp{g} for @samp{global} (i.e.@: change every | |
| 3670 non-overlapping occurrence of <pat>) and @samp{c} for | |
| 3671 @samp{confirm} (type @samp{y} to confirm a particular | |
| 3672 substitution, else @samp{n} ). Instead of @kbd{/} any | |
| 3673 punctuation CHAR unequal to <space> <tab> and <lf> can be used as | |
| 3674 delimiter. | |
| 3675 | |
| 3676 In Emacs, @samp{\&} stands for the last matched expression, so | |
| 3677 @kbd{s/[ab]+/\&\&/} will double the string matched by @kbd{[ab]}. | |
| 3678 Viper doesn't treat @samp{&} specially, unlike Vi: use @samp{\&} instead. | |
| 3679 | |
|
39901
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3680 Viper does not parse search patterns and does not expand special symbols |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3681 found there (e.g., @samp{~} is not expanded to the result of the previous |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3682 substitution). |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3683 |
| 25829 | 3684 Note: @emph{The newline character (inserted as @kbd{C-qC-j}) |
| 3685 can be used in <repl>}. | |
| 3686 @item :[x,y]copy [z] | |
| 3687 Copy text between @kbd{x} and @kbd{y} to the position after @kbd{z}. | |
| 3688 @item :[x,y]t [z] | |
| 3689 Same as @kbd{:copy}. | |
| 3690 @item :[x,y]move [z] | |
| 3691 Move text between @kbd{x} and @kbd{y} to the position after @kbd{z}. | |
| 3692 @item & | |
| 3693 Repeat latest Ex substitute command, e.g. | |
| 3694 @kbd{:s/wrong/right}. | |
|
44615
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3695 @item :x,yp |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3696 @itemx :g/Pat/p |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3697 @itemx :v/Pat/p |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3698 The above commands display certain buffer lines in a |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3699 temporary buffer. The first form above displays the buffer lines between |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3700 @kbd{x} and @kbd{y}. The second displays the lines of the buffer, which |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3701 match a given pattern. The third form displays the lines that do @emph{not} |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3702 match the given pattern. |
| 25829 | 3703 @item #c<move> |
| 3704 Change upper-case characters in the region to lower-case. | |
| 3705 @item #C<move> | |
| 3706 Change lower-case characters in the region to upper-case. | |
| 3707 @item #q<move> | |
| 3708 Insert specified string at the beginning of each line in the region | |
| 3709 @item C-c M-p and C-c M-n | |
| 3710 In Insert and Replace states, these keys are bound to commands that peruse | |
| 3711 the history of the text | |
| 3712 previously inserted in other insert or replace commands. By repeatedly typing | |
| 3713 @kbd{C-c M-p} or @kbd{C-c M-n}, you will cause Viper to | |
| 3714 insert these previously used strings one by one. | |
| 3715 When a new string is inserted, the previous one is deleted. | |
| 3716 | |
| 3717 In Vi state, these keys are bound to functions that peruse the history of | |
| 3718 destructive Vi commands. | |
| 3719 @xref{Viper Specials}, for details. | |
| 3720 @end table | |
| 3721 @kindex @kbd{C-c M-p} | |
| 3722 @kindex @kbd{C-c M-n} | |
| 3723 @kindex @kbd{#q<move> } | |
| 3724 @kindex @kbd{#C<move>} | |
| 3725 @kindex @kbd{#c<move>} | |
| 3726 @kindex @kbd{&} | |
| 3727 @kindex @kbd{\&} | |
| 3728 @findex @kbd{:substitute/<pat>/<repl>/<f>} | |
| 3729 @findex @kbd{:s/<pat>/<repl>/<f>} | |
| 3730 @findex @kbd{:copy [z]} | |
| 3731 @findex @kbd{:t [z]} | |
| 3732 @findex @kbd{:move [z]} | |
| 3733 @kindex @kbd{J} | |
| 3734 @kindex @kbd{~} | |
| 3735 @kindex @kbd{=<move>} | |
| 3736 @kindex @kbd{C} | |
| 3737 @kindex @kbd{cc} | |
| 3738 @kindex @kbd{c<move>} | |
| 3739 @kindex @kbd{S} | |
| 3740 @kindex @kbd{s} | |
| 3741 @kindex @kbd{R} | |
| 3742 @kindex @kbd{r<char>} | |
| 3743 | |
| 3744 @node Search and Replace, Yanking, Changing Text,Text Handling | |
| 3745 @subsection Search and Replace | |
| 3746 | |
| 3747 @xref{Groundwork}, for Ex address syntax. @xref{Options}, to see how to | |
| 3748 get literal (non-regular-expression) search and how to stop search from | |
| 3749 wrapping around. | |
| 3750 | |
| 3751 @table @kbd | |
|
44615
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3752 @item C-c / |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3753 Toggle case-sensitive search. With prefix argument, toggle vanilla/regular |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
3754 expression search. |
| 25829 | 3755 @item <count> /<string> |
| 3756 To the <count>th occurrence of <string>. | |
|
39901
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3757 |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3758 Viper does not parse search patterns and does not expand special symbols |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3759 found there (e.g., @samp{~} is not expanded to the result of the previous |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3760 substitution). |
|
50f67a72ea1b
2001-10-13 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39267
diff
changeset
|
3761 |
| 25829 | 3762 @item <count> ?<string> |
| 3763 To the <count>th previous occurrence of <string>. | |
| 3764 @item <count> g<move> | |
| 3765 Search for the text described by move. (off by default) | |
| 3766 @item n | |
| 3767 Repeat latest @kbd{/} @kbd{?} (next). | |
| 3768 @item N | |
| 3769 Idem in opposite direction. | |
| 3770 @item % | |
| 3771 Find the next bracket and go to its match | |
| 3772 @item :[x,y]g/<string>/<cmd> | |
| 3773 @cindex text processing | |
| 3774 Search globally [from line x to y] for <string> | |
| 3775 and execute the Ex <cmd> on each occurrence. | |
| 3776 @item :[x,y]v/<string>/<cmd> | |
| 3777 Execute <cmd> on the lines that don't match. | |
| 3778 @item #g<move> | |
| 3779 Execute the last keyboard macro for each line in the region. | |
| 3780 @xref{Macros and Registers}, for more info. | |
| 3781 @item Q | |
| 3782 Query Replace. | |
| 3783 @item :ta <name> | |
| 3784 Search in the tags file where <name> is defined (file, line), and go to it. | |
| 3785 @item :[x,y]s/<pat>/<repl>/<f> | |
| 3786 Substitute (on lines x through y) the pattern <pat> (default the last | |
| 3787 pattern) with <repl>. Useful | |
| 3788 flags <f> are @samp{g} for @samp{global} (i.e.@: change every | |
| 3789 non-overlapping occurrence of <pat>) and @samp{c} for | |
| 3790 @samp{confirm} (type @samp{y} to confirm a particular | |
| 3791 substitution, else @samp{n}). Instead of @kbd{/} any | |
| 3792 punctuation character other than <space> <tab> and <lf> can be used as | |
| 3793 delimiter. | |
| 3794 | |
| 3795 Note: @emph{The newline character (inserted as @kbd{C-qC-j}) | |
| 3796 can be used in <repl>}. | |
| 3797 @item & | |
| 3798 Repeat latest Ex substitute command, e.g.@: @kbd{:s/wrong/right}. | |
| 3799 @item :global /<pattern>/<ex-command> | |
| 3800 @itemx :g /<pattern>/<ex-command> | |
| 3801 Execute <ex-command> on all lines that match <pattern>. | |
| 3802 @item :vglobal /<pattern>/<ex-command> | |
| 3803 @itemx :v /<pattern>/<ex-command> | |
| 3804 Execute <ex-command> on all lines that do not match <pattern>. | |
| 3805 @end table | |
| 3806 @kindex @kbd{&} | |
| 3807 @findex @kbd{:substitute/<pat>/<repl>/<f>} | |
| 3808 @kindex @kbd{Q} | |
| 3809 @kindex @kbd{#g<move>} | |
| 3810 @findex @kbd{:v} | |
| 3811 @findex @kbd{:g} | |
| 3812 @findex @kbd{:global} | |
| 3813 @findex @kbd{:vglobal} | |
| 3814 @findex @kbd{:tag <name>} | |
| 3815 @kindex @kbd{%} | |
| 3816 @kindex @kbd{N} | |
| 3817 @kindex @kbd{n} | |
| 3818 @kindex @kbd{g<move>} | |
| 3819 @kindex @kbd{?<string>} | |
| 3820 @kindex @kbd{/<string>} | |
| 3821 | |
| 3822 @node Yanking,Undoing,Search and Replace,Text Handling | |
| 3823 @subsection Yanking | |
| 3824 | |
| 3825 @cindex cut and paste | |
| 3826 @cindex paste | |
| 3827 | |
| 3828 @table @kbd | |
| 3829 @item <count> y<move> | |
| 3830 Yank from begin to endpoint of <count><move>. | |
| 3831 @item <count> "<a-z>y<move> | |
| 3832 Yank from begin to endpoint of <count><move> to register. | |
| 3833 @item <count> "<A-Z>y<move> | |
| 3834 Yank from begin to endpoint of <count><move> and append | |
| 3835 to register. | |
| 3836 @item <count> yy | |
| 3837 <count> lines. | |
| 3838 @item <count> Y | |
| 3839 Idem (should be equivalent to @kbd{y$} though). | |
| 3840 @item m<a-z> | |
| 3841 Mark the cursor position with a letter. | |
| 3842 @item [<a-z> | |
| 3843 Show contents of textmarker. | |
| 3844 @item ]<a-z> | |
| 3845 Show contents of register. | |
| 3846 @item <count> ["<a-z1-9>]p | |
| 3847 Put the contents of the (default undo) buffer | |
| 3848 <count> times after the cursor. The register will | |
| 3849 be automatically down-cased. | |
| 3850 @item <count> ["<a-z1-9>]P | |
| 3851 Put the contents of the (default undo) buffer | |
| 3852 <count> times before the cursor. The register will | |
| 3853 @end table | |
| 3854 @kindex @kbd{P} | |
| 3855 @kindex @kbd{p} | |
| 3856 @kindex @kbd{"<a-z1-9>p} | |
| 3857 @kindex @kbd{"<a-z1-9>P} | |
| 3858 @kindex @kbd{]<a-z>} | |
| 3859 @kindex @kbd{[<a-z>} | |
| 3860 @kindex @kbd{m<a-z>} | |
| 3861 @kindex @kbd{Y} | |
| 3862 @kindex @kbd{yy} | |
| 3863 @kindex @kbd{"<A-Z>y<move>} | |
| 3864 @kindex @kbd{"<a-z>y<move>} | |
| 3865 @kindex @kbd{y<move>} | |
| 3866 @kindex @kbd{yank} | |
| 3867 @findex @kbd{:yank} | |
| 3868 | |
| 3869 @node Undoing,, Yanking,Text Handling | |
| 3870 @subsection Undoing | |
| 3871 | |
| 3872 @cindex undo | |
| 3873 @cindex backup files | |
| 3874 | |
| 3875 @table @kbd | |
| 3876 @item u U | |
| 3877 Undo the latest change. | |
| 3878 @item . | |
| 3879 Repeat undo. | |
| 3880 @item :q! | |
| 3881 Quit Vi without writing. | |
| 3882 @item :e! | |
| 3883 Re-edit a messed-up file. | |
| 3884 @item :rec | |
| 3885 Recover file from autosave. Viper also creates backup files | |
| 3886 that have a @samp{~} appended to them. | |
| 3887 @end table | |
| 3888 @findex @kbd{:rec} | |
| 3889 @findex @kbd{:e!} | |
| 3890 @findex @kbd{:q!} | |
| 3891 @kindex @kbd{.} | |
| 3892 @kindex @kbd{U} | |
| 3893 @kindex @kbd{u} | |
| 3894 | |
| 3895 @node Display, File and Buffer Handling, Text Handling, Commands | |
| 3896 @section Display | |
| 3897 | |
| 3898 @cindex scrolling | |
| 3899 | |
| 3900 @table @kbd | |
| 3901 @item C-g | |
| 3902 At user level 1, | |
| 3903 give file name, status, current line number | |
| 3904 and relative position.@* | |
| 3905 At user levels 2 and higher, abort the current command. | |
| 3906 @item C-c g | |
| 3907 Give file name, status, current line number and relative position -- all | |
| 3908 user levels. | |
| 3909 @item C-l | |
| 3910 Refresh the screen. | |
| 3911 @item <count> C-e | |
| 3912 Expose <count> more lines at bottom, cursor stays put (if possible). | |
| 3913 @item <count> C-y | |
| 3914 Expose <count> more lines at top, cursor stays put (if possible). | |
| 3915 @item <count> C-d | |
| 3916 Scroll <count> lines downward (default the number of the previous scroll; | |
| 3917 initialization: half a page). | |
| 3918 @item <count> C-u | |
| 3919 Scroll <count> lines upward (default the number of the previous scroll; | |
| 3920 initialization: half a page). | |
| 3921 @item <count> C-f | |
| 3922 <count> pages forward. | |
| 3923 @item <count> C-b | |
| 3924 <count> pages backward (in older versions @kbd{C-b} only works without count). | |
| 3925 @item <count> z<cr> | |
| 3926 @item zH | |
| 3927 Put line <count> at the top of the window (default the current line). | |
| 3928 @item <count> z- | |
| 3929 @item zL | |
| 3930 Put line <count> at the bottom of the window | |
| 3931 (default the current line). | |
| 3932 @item <count> z. | |
| 3933 @item zM | |
| 3934 Put line <count> in the center of the window | |
| 3935 (default the current line). | |
| 3936 @end table | |
| 3937 @kindex @kbd{zM} | |
| 3938 @kindex @kbd{zL} | |
| 3939 @kindex @kbd{zH} | |
| 3940 @kindex @kbd{z<cr>} | |
| 3941 @kindex @kbd{z.} | |
| 3942 @kindex @kbd{z-} | |
| 3943 @kindex @kbd{z<cr>} | |
| 3944 @kindex @kbd{C-b} | |
| 3945 @kindex @kbd{C-f} | |
| 3946 @kindex @kbd{C-u} | |
| 3947 @kindex @kbd{C-d} | |
| 3948 @kindex @kbd{C-y} | |
| 3949 @kindex @kbd{C-e} | |
| 3950 @kindex @kbd{C-l} | |
| 3951 @kindex @kbd{C-g} | |
| 3952 | |
| 3953 | |
| 3954 @node File and Buffer Handling, Mapping, Display,Commands | |
| 3955 @section File and Buffer Handling | |
| 3956 | |
| 3957 @cindex multiple files | |
| 3958 | |
| 3959 In all file handling commands, space should be typed before entering the file | |
| 3960 name. If you need to type a modifier, such as @kbd{>>} or @kbd{!}, don't | |
| 3961 put any space between the command and the modifier. | |
| 3962 | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3963 Note that many Ex commands, e.g., @kbd{:w}, accept command arguments. The |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3964 effect is that the command would start acting on the current region. For |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3965 instance, if the current region spans the lines 11 through 22, then if you |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3966 type @kbd{1:w} you would see @samp{:11,22w} in the minibuffer. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
3967 |
| 25829 | 3968 @table @kbd |
| 3969 @item :q | |
| 3970 Quit buffer except if modified. | |
| 3971 @item :q! | |
| 3972 Quit buffer without checking. In Viper, these two commands | |
| 3973 are identical. Confirmation is required if exiting modified buffers that | |
| 3974 visit files. | |
| 3975 @item :suspend | |
| 3976 @item :stop | |
| 3977 Suspend Viper | |
| 3978 @item :[x,y] w | |
| 3979 Write the file. Viper makes sure that a final newline is always added to | |
| 3980 any file where this newline is missing. This is done by setting Emacs | |
| 3981 variable @code{require-final-newline} to @code{t}. If you don't like this | |
| 3982 feature, use @code{setq-default} to set @code{require-final-newline} to | |
| 3983 @code{nil}. This must be done in @file{.viper} file. | |
| 3984 @item :[x,y] w <name> | |
| 3985 Write to the file <name>. | |
| 3986 @item :[x,y] w>> <name> | |
| 3987 Append the buffer to the file <name>. There should be no space between | |
| 3988 @kbd{w} and @kbd{>>}. Type space after the @kbd{>>} and see what happens. | |
| 3989 @item :w!@: <name> | |
| 3990 Overwrite the file <name>. In Viper, @kbd{:w} and @kbd{:w!} are identical. | |
| 3991 Confirmation is required for writing to an existing file (if this is not | |
| 3992 the file the buffer is visiting) or to a read-only file. | |
| 3993 @item :x,y w <name> | |
| 3994 Write lines x through y to the file <name>. | |
| 3995 @item :wq | |
| 3996 Write the file and kill buffer. | |
| 3997 @item :r <file> [<file> ...] | |
| 3998 Read file into a buffer, inserting its contents after the current line. | |
| 3999 @item :xit | |
| 4000 Same as @kbd{:wq}. | |
| 4001 @item :Write | |
| 4002 @itemx :W | |
| 4003 Save all unsaved buffers, asking for confirmation. | |
| 4004 @item :WWrite | |
| 4005 @itemx :WW | |
| 4006 Like @kbd{W}, but without asking for confirmation. | |
| 4007 @item ZZ | |
| 4008 Save current buffer and kill it. If user level is 1, then save all files | |
| 4009 and kill Emacs. Killing Emacs is the wrong way to use it, so you should | |
| 4010 switch to higher user levels as soon as possible. | |
| 4011 @item :x [<file>] | |
| 4012 Save and kill buffer. | |
| 4013 @item :x!@: [<file>] | |
| 4014 @kbd{:w![<file>]} and @kbd{:q}. | |
| 4015 @item :pre | |
| 4016 Preserve the file -- autosave buffers. | |
| 4017 @item :rec | |
| 4018 Recover file from autosave. | |
|
42288
3ce98f3e0608
2001-12-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39901
diff
changeset
|
4019 @item :f [<file>] |
|
3ce98f3e0608
2001-12-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39901
diff
changeset
|
4020 without the argument, prints file name and character/line information afout |
|
3ce98f3e0608
2001-12-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39901
diff
changeset
|
4021 the currently visited file. With an argument, sets the currently visited |
|
3ce98f3e0608
2001-12-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39901
diff
changeset
|
4022 filename to @file{file}. |
| 25829 | 4023 @item :cd [<dir>] |
| 4024 Set the working directory to <dir> (default home directory). | |
| 4025 @item :pwd | |
| 4026 Print present working directory. | |
| 4027 @item :e [+<cmd>] <files> | |
| 4028 Edit files. If no filename is given, edit the file visited by the current | |
| 4029 buffer. If buffer was modified or the file changed on disk, ask for | |
| 4030 confirmation. Unlike Vi, Viper allows @kbd{:e} to take multiple arguments. | |
| 4031 The first file is edited the same way as in Vi. The rest are visited | |
| 4032 in the usual Emacs way. | |
| 4033 @item :e!@: [+<cmd>] <files> | |
| 4034 Re-edit file. If no filename, re-edit current file. | |
| 4035 In Viper, unlike Vi, @kbd{e!} is identical to @kbd{:e}. In both cases, the | |
| 4036 user is asked to confirm if there is a danger of discarding changes to a | |
| 4037 buffer. | |
| 4038 @item :q! | |
| 4039 Quit Vi without writing. | |
| 4040 @item C-^ | |
| 4041 Edit the alternate (normally the previous) file. | |
| 4042 @item :rew | |
| 4043 Obsolete | |
| 4044 @item :args | |
| 4045 List files not shown anywhere with counts for next | |
| 4046 @item :n [count] [+<cmd>] [<files>] | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
4047 Edit <count> file, or edit files. The count comes from @kbd{:args}. |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47737
diff
changeset
|
4048 @item :N [count] [+<cmd>] [<files>] |
| 25829 | 4049 Like @kbd{:n}, but the meaning of the variable |
| 4050 @var{ex-cycle-other-window} is reversed. | |
| 4051 @item :b | |
| 4052 Switch to another buffer. If @var{ex-cycle-other-window} is @code{t}, | |
| 4053 switch in another window. Buffer completion is supported. | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4054 The variable @var{viper-read-buffer-function} controls which function is |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4055 actually used to read the buffer name. The default is @code{read-buffer}, |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4056 but better alternatives are also available in Emacs (e.g., |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4057 @code{iswitchb-read-buffer}). |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4058 @vindex @var{viper-read-buffer-function} |
| 25829 | 4059 @item :B |
| 4060 Like @kbd{:b}, but the meaning of @var{ex-cycle-other-window} is reversed. | |
| 4061 @item :<address>r <name> | |
| 4062 Read the file <name> into the buffer after the line <address>. | |
| 4063 @item v, V, C-v | |
| 4064 Edit a file in current or another window, or in another frame. File name | |
| 4065 is typed in Minibuffer. File completion and history are supported. | |
| 4066 @end table | |
| 4067 @kindex @kbd{v} | |
| 4068 @kindex @kbd{V} | |
| 4069 @findex @kbd{:args} | |
| 4070 @findex @kbd{:rew} | |
| 4071 @kindex @kbd{C-^} | |
| 4072 @findex @kbd{:e!@: [<files>]} | |
| 4073 @findex @kbd{:e [<files>]} | |
| 4074 @findex @kbd{:edit [<files>]} | |
| 4075 @findex @kbd{:edit!@: [<files>]} | |
| 4076 @findex @kbd{:q!} | |
| 4077 @findex @kbd{:q} | |
| 4078 @findex @kbd{:quit} | |
| 4079 @findex @kbd{:quit!} | |
| 4080 @findex @kbd{:f} | |
| 4081 @findex @kbd{:rec} | |
| 4082 @findex @kbd{:r} | |
| 4083 @findex @kbd{:read} | |
| 4084 @findex @kbd{:pre} | |
| 4085 @kindex @kbd{ZZ} | |
| 4086 @findex @kbd{:wq} | |
| 4087 @findex @kbd{:w <file>} | |
| 4088 @findex @kbd{:w!@: <file>} | |
| 4089 @findex @kbd{:w >> <file>} | |
| 4090 @findex @kbd{:write <file>} | |
| 4091 @findex @kbd{:write!@: <file>} | |
| 4092 @findex @kbd{:write >> <file>} | |
| 4093 @findex @kbd{:W} | |
| 4094 @findex @kbd{:WW} | |
| 4095 @findex @kbd{:Write} | |
| 4096 @findex @kbd{:WWrite} | |
| 4097 @findex @kbd{:WWrite} | |
| 4098 @findex @kbd{:x} | |
| 4099 @findex @kbd{:x!} | |
| 4100 @findex @kbd{:suspend} | |
| 4101 @findex @kbd{:stop} | |
| 4102 @findex @kbd{:n [<count> | <file>]} | |
| 4103 @findex @kbd{:cd [<dir>]} | |
| 4104 @findex @kbd{:pwd} | |
| 4105 | |
| 4106 @node Mapping, Shell Commands, File and Buffer Handling, Commands | |
| 4107 @section Mapping | |
| 4108 | |
| 39267 | 4109 @cindex key bindings |
| 25829 | 4110 @cindex key mapping |
| 4111 | |
| 4112 @table @kbd | |
| 4113 @item :map <string> | |
| 4114 Start defining a Vi-style keyboard macro. | |
| 4115 For instance, typing | |
| 4116 @kbd{:map www} followed by @kbd{:!wc %} and then typing @kbd{C-x )} | |
| 4117 will cause @kbd{www} to run wc on | |
| 4118 current file (Vi replaces @samp{%} with the current file name). | |
| 4119 @item C-x ) | |
| 4120 Finish defining a keyboard macro. | |
| 4121 In Viper, this command completes the process of defining all keyboard | |
| 4122 macros, whether they are Emacs-style or Vi-style. | |
| 4123 This is a departure from Vi, needed to allow WYSIWYG mapping of | |
| 4124 keyboard macros and to permit the use of function keys and arbitrary Emacs | |
| 4125 functions in the macros. | |
| 4126 @item :unmap <string> | |
| 4127 Deprive <string> of its mappings in Vi state. | |
| 4128 @item :map!@: <string> | |
| 4129 Map a macro for Insert state. | |
| 4130 @item :unmap!@: <string> | |
| 4131 Deprive <string> of its mapping in Insert state (see @kbd{:unmap}). | |
| 4132 @item @@<a-z> | |
| 4133 In Vi state, | |
| 4134 execute the contents of register as a command. | |
| 4135 @item @@@@ | |
| 4136 In Vi state, | |
| 4137 repeat last register command. | |
| 4138 @item @@# | |
| 4139 In Vi state, | |
| 4140 begin keyboard macro. End with @@<a-z>. This will | |
| 4141 put the macro in the proper register. Register will | |
| 4142 be automatically down-cased. | |
| 4143 @xref{Macros and Registers}, for more info. | |
| 4144 @item @@!<a-z> | |
| 4145 In Vi state, | |
| 4146 yank anonymous macro to register | |
| 4147 @item * | |
| 4148 In Vi state, | |
| 4149 execute anonymous macro (defined by C-x( and C-x )). | |
| 4150 @item C-x e | |
| 4151 Like @kbd{*}, but works in all Viper states. | |
| 4152 @item #g<move> | |
| 4153 Execute the last keyboard macro for each line in the region. | |
| 4154 @xref{Macros and Registers}, for more info. | |
| 4155 @item [<a-z> | |
| 4156 Show contents of textmarker. | |
| 4157 @item ]<a-z> | |
| 4158 Show contents of register. | |
| 4159 @end table | |
| 4160 @kindex @kbd{]<a-z>} | |
| 4161 @kindex @kbd{[<a-z>} | |
| 4162 @kindex @kbd{#g<move>} | |
| 4163 @kindex @kbd{*} | |
| 4164 @kindex @kbd{@@!<a-z>} | |
| 4165 @kindex @kbd{@@#} | |
| 4166 @kindex @kbd{@@@@} | |
| 4167 @kindex @kbd{@@<a-z>} | |
| 4168 @findex @kbd{:unmap <char>} | |
| 4169 @findex @kbd{:map <char> <seq>} | |
| 4170 @findex @kbd{:unmap!@: <char>} | |
| 4171 @findex @kbd{:map!@: <char> <seq>} | |
| 4172 | |
| 4173 @node Shell Commands, Options, Mapping, Commands | |
| 4174 @section Shell Commands | |
| 4175 | |
| 4176 @cindex % (Current file) | |
| 4177 | |
|
26263
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4178 The symbol @samp{%} is used in Ex shell commands to mean current file. If |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4179 you want a @samp{%} in your command, it must be escaped as @samp{\%}. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4180 @cindex @samp{%} (Ex address) |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4181 However if @samp{%} is the first character, it stands as the address for |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4182 the whole file. |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4183 @cindex @samp{#} (Previous file) |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4184 Similarly, @samp{#} expands to the previous file. The previous file is the |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4185 first file in @kbd{:args} listing. This defaults to the previous file in |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4186 the VI sense if you have one window.@refill |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4187 |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4188 Symbols @samp{%} and @samp{#} are also used in the Ex commands @kbd{:e} and |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4189 @kbd{:r <shell-cmd>}. The commands @kbd{:w} and the regular @kbd{:r |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4190 <file>} command don't support these meta symbols, because file history is a |
|
4f315ca65976
*** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
25829
diff
changeset
|
4191 better mechanism. |
| 25829 | 4192 |
| 4193 @cindex shell commands | |
| 4194 | |
| 4195 @table @kbd | |
| 4196 @item :sh | |
| 4197 Execute a subshell in another window | |
| 4198 @item :[x,y]!<cmd> | |
| 4199 Execute a shell <cmd> [on lines x through y; | |
| 4200 % is replace by current file, \% is changed to % | |
| 4201 @item :[x,y]!!@: [<args>] | |
| 4202 Repeat last shell command [and append <args>]. | |
| 4203 @item :!<cmd> | |
| 4204 Just execute command and display result in a buffer. | |
| 4205 @item :!!@: <args> | |
| 4206 Repeat last shell command and append <args> | |
| 4207 @item <count> !<move><cmd> | |
| 4208 The shell executes <cmd>, with standard | |
| 4209 input the lines described by <count><move>, | |
| 4210 next the standard output replaces those lines | |
| 4211 (think of @samp{cb}, @samp{sort}, @samp{nroff}, etc.). | |
| 4212 @item <count> !!<cmd> | |
| 4213 Give <count> lines as standard input to the | |
| 4214 shell <cmd>, next let the standard output | |
| 4215 replace those lines. | |
| 4216 @item :[x,y] w !<cmd> | |
| 4217 Let lines x to y be standard input for <cmd> | |
| 4218 (notice the <sp> between @kbd{w} and @kbd{!}). | |
| 4219 @item :<address>r !<cmd> | |
| 4220 Put the output of <cmd> after the line <address> (default current). | |
| 4221 @item :<address>r <name> | |
| 4222 Read the file <name> into the buffer after the line <address> (default | |
| 4223 current). | |
|
38514
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
4224 @item :make |
|
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
4225 Run the make command in the current directory. |
| 25829 | 4226 @end table |
| 4227 @findex @kbd{:<address>r <name>} | |
| 4228 @findex @kbd{:<address>r !<cmd>} | |
| 4229 @findex @kbd{!<cmd>} | |
| 4230 @findex @kbd{!!<cmd>} | |
| 4231 @findex @kbd{!<move><cmd>} | |
| 4232 @findex @kbd{:w !<cmd>} | |
| 4233 @findex @kbd{:x,y w !<cmd>} | |
| 4234 @findex @kbd{:!!@: <args>} | |
| 4235 @findex @kbd{:!<cmd>} | |
| 4236 @findex @kbd{:sh} | |
|
38514
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
4237 @findex @kbd{:make} |
| 25829 | 4238 |
| 4239 @node Options,Emacs Related Commands,Shell Commands,Commands | |
| 4240 @section Options | |
| 4241 | |
| 4242 @cindex Vi options | |
| 4243 | |
| 4244 @table @kbd | |
| 4245 @item autoindent | |
| 4246 @itemx ai | |
| 4247 @cindex autoindent | |
| 4248 autoindent -- In append mode after a <cr> the | |
| 4249 cursor will move directly below the first | |
| 4250 character on the previous line. | |
| 4251 This setting affects the current buffer only. | |
| 4252 @item autoindent-global | |
| 4253 @itemx ai-global | |
| 4254 Same as `autoindent', but affects all buffers. | |
| 4255 @item noautoindent | |
| 4256 @itemx noai | |
| 4257 Cancel autoindent. | |
| 4258 @item noautoindent-global | |
| 4259 @itemx noai-g | |
| 4260 Cancel autoindent-global. | |
| 4261 @item ignorecase | |
| 4262 @itemx ic | |
| 4263 @cindex case and searching | |
| 4264 ignorecase -- No distinction between upper and lower cases when searching. | |
| 4265 @item noignorecase | |
| 4266 @itemx noic | |
| 4267 Cancel ignorecase. | |
| 4268 @item magic | |
| 4269 @itemx ma | |
| 4270 @cindex literal searching | |
| 4271 Regular expressions used in searches; nomagic means no regexps. | |
| 4272 @item nomagic | |
| 4273 @item noma | |
| 4274 Cancel magic. | |
| 4275 @item readonly | |
| 4276 @itemx ro | |
| 4277 @cindex readonly files | |
| 4278 readonly -- The file is not to be changed. | |
| 4279 If the user attempts to write to this file, confirmation will be requested. | |
| 4280 @item noreadonly | |
| 4281 @itemx noro | |
| 4282 Cancel readonly. | |
| 4283 @item shell=<string> | |
| 4284 @itemx sh=<string> | |
| 4285 @cindex shell | |
| 4286 shell -- The program to be used for shell escapes | |
| 4287 (default @samp{$SHELL} (default @file{/bin/sh})). | |
| 4288 @item shiftwidth=<count> | |
| 4289 @itemx sw=<count> | |
| 4290 @cindex layout | |
| 4291 @cindex shifting text | |
| 4292 shiftwidth -- Gives the shiftwidth (default 8 positions). | |
| 4293 @item showmatch | |
| 4294 @itemx sm | |
| 4295 @cindex paren matching | |
| 4296 @cindex matching parens | |
| 4297 showmatch -- Whenever you append a @kbd{)}, Vi shows | |
| 4298 its match if it's on the same page; also with | |
| 4299 @kbd{@{} and @kbd{@}}. If there's no match, Vi will beep. | |
| 4300 @item noshowmatch | |
| 4301 @itemx nosm | |
| 4302 Cancel showmatch. | |
| 4303 @item tabstop=<count> | |
| 4304 @itemx ts=<count> | |
| 4305 @cindex changing tab width | |
| 4306 @cindex tabbing | |
| 4307 tabstop -- The length of a <ht>; warning: this is | |
| 4308 only IN the editor, outside of it <ht>s have | |
| 4309 their normal length (default 8 positions). | |
| 4310 This setting affects the current buffer only. | |
| 4311 @item tabstop-global | |
| 4312 @itemx ts-g | |
| 4313 Same as `tabstop', but affects all buffers. | |
| 4314 @item wrapmargin=<count> | |
| 4315 @itemx wm=<count> | |
| 4316 @cindex auto fill | |
| 4317 @cindex word wrap | |
| 4318 wrapmargin -- In append mode Vi automatically | |
| 4319 puts a <lf> whenever there is a <sp> or <ht> | |
| 4320 within <wm> columns from the right margin. | |
| 4321 @item wrapscan | |
| 4322 @itemx ws | |
| 4323 @cindex searching | |
| 4324 wrapscan -- When searching, the end is | |
| 4325 considered @samp{stuck} to the begin of the file. | |
| 4326 @item nowrapscan | |
| 4327 @itemx nows | |
| 4328 Cancel wrapscan. | |
| 4329 @item :set <option> | |
| 4330 Turn <option> on. | |
| 4331 @item :set no<option> | |
| 4332 Turn <option> off. | |
| 4333 @item :set <option>=<value> | |
| 4334 Set <option> to <value>. | |
| 4335 @end table | |
| 4336 @findex @kbd{:set <option>=<value>} | |
| 4337 @findex @kbd{:set no<option>} | |
| 4338 @findex @kbd{:set <option>} | |
| 4339 @findex @kbd{:set ws} | |
| 4340 @findex @kbd{:set wrapscan} | |
| 4341 @findex @kbd{:set wm=<count>} | |
| 4342 @findex @kbd{:set wrapmargin=<count>} | |
| 4343 @findex @kbd{:set ts=<count>} | |
| 4344 @findex @kbd{:set tabstop=<count>} | |
| 4345 @findex @kbd{:set tab-stop-local=<count>} | |
| 4346 @findex @kbd{:set sm} | |
| 4347 @findex @kbd{:set showmatch} | |
| 4348 @findex @kbd{:set sw=<count>} | |
| 4349 @findex @kbd{:set shiftwidth=<count>} | |
| 4350 @findex @kbd{:set sh=<string>} | |
| 4351 @findex @kbd{:set shell=<string>} | |
| 4352 @findex @kbd{:set ro} | |
| 4353 @findex @kbd{:set readonly} | |
| 4354 @findex @kbd{:set magic} | |
| 4355 @findex @kbd{:set ic} | |
| 4356 @findex @kbd{:set ignorecase} | |
| 4357 @findex @kbd{:set ai} | |
| 4358 @findex @kbd{:set autoindent} | |
| 4359 | |
| 4360 @node Emacs Related Commands,,Options,Commands | |
| 4361 @section Emacs Related Commands | |
| 4362 | |
| 4363 @table @kbd | |
| 4364 @item C-\ | |
| 4365 Begin Meta command in Vi or Insert states. Most often used as C-\ x (M-x). | |
| 4366 | |
| 4367 Note: Emacs binds @kbd{C-\} to a function that offers to change the | |
| 4368 keyboard input method in the multilingual environment. Viper overrides this | |
| 4369 binding. However, it is still possible to switch the input method by typing | |
| 4370 @kbd{\ C-\} in the Vi command state and @kbd{C-z \ C-\} in the Insert state. | |
| 4371 Or you can use the MULE menu on the menubar. | |
| 4372 @item C-z | |
| 4373 In Insert and Replace states, prepare Viper to accept the next command and | |
| 4374 execute it as if Viper was in Vi state. Then return to Insert state. | |
| 4375 | |
| 4376 In Vi state, switch to Emacs state; in Emacs state, switch to Vi state. | |
| 4377 @item C-c \ | |
| 4378 Switches to Vi state for the duration of a single command. Then goes back | |
| 4379 to the original Viper state. Works from Vi, Insert, Replace, and Emacs states. | |
| 4380 @item C-x0 | |
| 4381 Close Window | |
| 4382 @item C-x1 | |
| 4383 Close Other Windows | |
| 4384 @item C-x2 | |
| 4385 Split Window | |
| 4386 @item C-xo | |
| 4387 Move among windows | |
| 4388 @item C-xC-f | |
| 4389 Emacs find-file, useful in Insert state | |
| 4390 @item C-y | |
| 4391 Put back the last killed text. Similar to Vi's @kbd{p}, but also works in | |
| 4392 Insert and Replace state. This command doesn't work in Vi command state, | |
| 4393 since this binding is taken for something else. | |
| 4394 @item M-y | |
| 4395 Undoes the last @kbd{C-y} and puts another kill from the kill ring. | |
| 4396 Using this command, you can try may different kills until you find the one | |
| 4397 you need. | |
| 4398 @end table | |
| 4399 @kindex @kbd{M-y} | |
| 4400 @kindex @kbd{C-y} | |
| 4401 @kindex @kbd{C-xC-f} | |
| 4402 @kindex @kbd{C-xo} | |
| 4403 @kindex @kbd{C-x2} | |
| 4404 @kindex @kbd{C-x1} | |
| 4405 @kindex @kbd{C-x0} | |
| 4406 @kindex @kbd{C-z} | |
| 4407 @kindex @kbd{C-\} | |
| 4408 @kindex @kbd{C-c\} | |
| 4409 | |
| 4410 @node Mouse-bound Commands,,,Commands | |
| 4411 @section Mouse-bound Commands | |
| 4412 | |
|
36340
1ca425b36c74
(Rudimentary Changes): Remove doubled `to'.
Gerd Moellmann <gerd@gnu.org>
parents:
36155
diff
changeset
|
4413 The following two mouse actions are normally bound to special search and |
| 25829 | 4414 insert commands in of Viper: |
| 4415 | |
| 4416 @table @kbd | |
|
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
4417 @item S-Mouse-1 |
| 25829 | 4418 Holding Shift and clicking mouse button 1 will |
| 4419 initiate search for | |
| 4420 a region under the mouse pointer. | |
| 4421 This command can take a prefix argument. Note: Viper sets this | |
| 4422 binding only if this mouse action is not | |
| 4423 already bound to something else. | |
| 4424 @xref{Viper Specials}, for more information.@refill | |
| 4425 | |
|
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
4426 @item S-Mouse-2 |
| 25829 | 4427 Holding Shift and clicking button 2 of the mouse will |
| 4428 insert a region surrounding the mouse pointer. | |
| 4429 This command can also take a prefix argument. | |
| 4430 Note: Viper sets this binding only if this mouse action is not | |
| 4431 already bound to something else. | |
| 4432 @xref{Viper Specials}, for more details.@refill | |
| 4433 @end table | |
|
36155
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
4434 @kindex @kbd{S-Mouse-1} |
|
3594ca3f5f64
Fix some Texinfo usage.
Richard M. Stallman <rms@gnu.org>
parents:
36043
diff
changeset
|
4435 @kindex @kbd{S-Mouse-2} |
| 25829 | 4436 @kindex @kbd{meta button1up} |
| 4437 @kindex @kbd{meta button2up} | |
| 4438 | |
| 4439 @node Acknowledgments,,,Top | |
| 4440 @comment node-name, next, previous, up | |
| 4441 @unnumbered Acknowledgments | |
| 4442 | |
| 4443 Viper, formerly known as VIP-19, was written by Michael Kifer. Viper is | |
| 4444 based on the original VIP package by Masahiko Sato and on its enhancement, | |
| 4445 VIP 4.4, by Aamod Sane. This manual is an adaptation of the manual for VIP | |
| 4446 4.4, which, in turn, was based on Sato's manual for VIP 3.5. | |
| 4447 | |
|
44615
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
4448 Many contributors on the Net pointed out bugs and suggested a number of |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
4449 useful features. Scott Bronson and Samuel Padgett contributed patches that |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
4450 were incorporated in this code. Here is a hopefully complete list of |
|
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
4451 contributors: |
| 25829 | 4452 |
| 4453 @example | |
|
33019
6306740f6938
2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
30009
diff
changeset
|
4454 aaronl@@vitelus.com (Aaron Lehmann), |
| 25829 | 4455 ahg@@panix.com (Al Gelders), |
| 4456 amade@@diagram.fr (Paul-Bernard Amade), | |
| 4457 ascott@@fws214.intel.com (Andy Scott), | |
|
36857
f6386773ce30
2001-03-17 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
36340
diff
changeset
|
4458 bronson@@trestle.com (Scott Bronson), |
| 25829 | 4459 cook@@biostat.wisc.edu (Tom Cook), |
| 4460 csdayton@@midway.uchicago.edu (Soren Dayton), | |
| 4461 dave@@hellgate.utah.edu, | |
|
42288
3ce98f3e0608
2001-12-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39901
diff
changeset
|
4462 dm@@scs.cs.nyu.edu (David Mazieres), |
| 25829 | 4463 dominik@@strw.LeidenUniv.nl (Carsten Dominik), |
| 4464 dwallach@@cs.princeton.edu (Dan Wallach), | |
| 4465 dwight@@toolucky.llnl.gov (Dwight Shih), | |
|
44615
a1448e19a9f8
* viper-ex.el: Patch by Samuel Padgett. Copyright papers received.
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42638
diff
changeset
|
4466 dxc@@xprt.net (David X Callaway), |
| 25829 | 4467 edmonds@@edmonds.home.cs.ubc.ca (Brian Edmonds), |
|
35411
be20c22dc16d
2001-01-19 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
35188
diff
changeset
|
4468 gin@@mo.msk.ru (Golubev I.N.), |
| 25829 | 4469 gviswana@@cs.wisc.edu (Guhan Viswanathan), |
| 4470 gvr@@halcyon.com (George V.@: Reilly), | |
| 4471 hatazaki@@bach.convex.com (Takao Hatazaki), | |
| 4472 hpz@@ibmhpz.aug.ipp-garching.mpg.de (Hans-Peter Zehrfeld), | |
| 4473 jackr@@dblues.engr.sgi.com (Jack Repenning), | |
| 4474 jamesm@@bga.com (D.J.@: Miller II), | |
| 4475 jjm@@hplb.hpl.hp.com (Jean-Jacques Moreau), | |
| 4476 jl@@cse.ogi.edu (John Launchbury), | |
| 4477 jobrien@@hchp.org (John O'Brien), | |
| 4478 johnw@@borland.com (John Wiegley), | |
| 4479 kanze@@gabi-soft.fr (James Kanze), | |
| 4480 kin@@isi.com (Kin Cho), | |
| 4481 kwzh@@gnu.org (Karl Heuer), | |
| 4482 lindstro@@biostat.wisc.edu (Mary Lindstrom), | |
|
47520
a37b476e1aec
2002-09-18 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
44616
diff
changeset
|
4483 lektu@@terra.es (Juanma Barranquero), |
|
29165
641e43bad886
2000-05-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
28510
diff
changeset
|
4484 minakaji@@osaka.email.ne.jp (Mikio Nakajima), |
| 25829 | 4485 Mark.Bordas@@East.Sun.COM (Mark Bordas), |
| 4486 meyering@@comco.com (Jim Meyering), | |
|
36043
5d6b76d28b83
2001-02-12 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
35411
diff
changeset
|
4487 martin@@xemacs.org (Martin Buchholz), |
|
38514
10482dd382e7
* viper-ex.el (ex-token-list,ex-cmd-execute): Revamped, courtesy
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
37806
diff
changeset
|
4488 mbutler@@redfernnetworks.com (Malcolm Butler), |
| 25829 | 4489 mveiga@@dit.upm.es (Marcelino Veiga Tuimil), |
| 4490 paulk@@summit.esg.apertus.com (Paul Keusemann), | |
|
42602
633233bf2bbf
2002-01-07 Michael Kifer <kifer@cs.stonybrook.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
42288
diff
changeset
|
4491 pfister@@cs.stonybrook.edu (Hanspeter Pfister), |
| 25829 | 4492 phil_brooks@@MENTORG.COM (Phil Brooks), |
| 4493 pogrell@@informatik.hu-berlin.de (Lutz Pogrell), | |
| 4494 pradyut@@cs.uchicago.edu (Pradyut Shah), | |
| 4495 roderick@@argon.org (Roderick Schertler), | |
| 4496 rxga@@ulysses.att.com, | |
| 4497 sawdey@@lcse.umn.edu (Aaron Sawdey), | |
| 4498 simonb@@prl.philips.co.uk (Simon Blanchard), | |
|
42288
3ce98f3e0608
2001-12-24 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents:
39901
diff
changeset
|
4499 spadgett1@@nc.rr.com (Samuel Padgett), |
| 25829 | 4500 stephen@@farrell.org (Stephen Farrell), |
| 4501 sudish@@MindSpring.COM (Sudish Joseph), | |
| 4502 schwab@@issan.informatik.uni-dortmund.de (Andreas Schwab) | |
| 4503 terra@@diku.dk (Morten Welinder), | |
| 4504 thanh@@informatics.muni.cz (Han The Thanh), | |
| 4505 toma@@convex.convex.com, | |
| 4506 vrenjak@@sun1.racal.com (Milan Vrenjak), | |
| 4507 whicken@@dragon.parasoft.com (Wendell Hicken), | |
| 4508 zapman@@cc.gatech.edu (Jason Zapman II), | |
| 4509 @end example | |
| 4510 | |
| 4511 | |
| 4512 @node Key Index,Function Index,,Top | |
| 4513 @comment node-name, next, previous, up | |
| 4514 @unnumbered Key Index | |
| 4515 | |
| 4516 @printindex ky | |
| 4517 | |
| 4518 @node Function Index,Variable Index,Key Index,Top | |
| 4519 @comment node-name, next, previous, up | |
| 4520 @unnumbered Function Index | |
| 4521 | |
| 4522 @printindex fn | |
| 4523 | |
| 4524 @node Variable Index,Package Index,Function Index,Top | |
| 4525 @comment node-name, next, previous, up | |
| 4526 @unnumbered Variable Index | |
| 4527 | |
| 4528 @printindex vr | |
| 4529 | |
| 4530 @node Package Index,Concept Index,Variable Index,Top | |
| 4531 @comment node-name, next, previous, up | |
| 4532 @unnumbered Package Index | |
| 4533 | |
| 4534 @printindex pg | |
| 4535 | |
| 4536 @node Concept Index,,Package Index,Top | |
| 4537 @comment node-name, next, previous, up | |
| 4538 @unnumbered Concept Index | |
| 4539 | |
| 4540 @printindex cp | |
| 4541 | |
| 29713 | 4542 @setchapternewpage odd |
| 25829 | 4543 @contents |
| 4544 @bye | |
| 52401 | 4545 |
| 4546 @ignore | |
| 4547 arch-tag: f53e866a-15cf-4b1e-aead-77da9da1e864 | |
| 4548 @end ignore |
