diff options
Diffstat (limited to 'info/vip-1')
-rw-r--r-- | info/vip-1 | 1514 |
1 files changed, 1514 insertions, 0 deletions
diff --git a/info/vip-1 b/info/vip-1 new file mode 100644 index 00000000000..33c187cb25b --- /dev/null +++ b/info/vip-1 @@ -0,0 +1,1514 @@ +Info file ../info/vip, produced by Makeinfo, -*- Text -*- from input +file vip.texinfo. + +Distribution +************ + +Copyright (C) 1987 Masahiko Sato. + +Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + +Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the same conditions as for +modified versions. + + + +File: vip, Node: Top, Next: Survey, Up: (DIR) + +VIP *** + +VIP is a Vi emulating package written in Emacs Lisp. VIP implements +most Vi commands including Ex commands. It is therefore hoped that +this package will enable you to do Vi style editing under the +powerful GNU Emacs environment. This info file describes the usage +of VIP assuming that you are fairly accustomed to Vi but not so much +with Emacs. Also we will concentrate mainly on differences from Vi, +especially features unique to VIP. + +It is recommended that you read nodes on survey and on customization +before you start using VIP. Other nodes may be visited as needed. + +Comments and bug reports are welcome. Please send messages to +`ms@Sail.Stanford.Edu' if you are outside of Japan and to +`masahiko@sato.riec.tohoku.junet' if you are in Japan. + +* Menu: + +* Survey:: A survey of VIP. +* Vi Commands:: Details of Vi commands. +* Ex Commands:: Details of Ex commands. +* Customization:: How to customize VIP. + + + +File: vip, Node: Survey, Next: Basic Concepts, Prev: Top, Up: Top + +A Survey of VIP +*************** + +In this chapter we describe basics of VIP with emphasis on the +features not found in Vi and on how to use VIP under GNU Emacs. + +* Menu: + +* Basic Concepts:: Basic concepts in Emacs. +* Loading VIP:: How to load VIP automatically. +* Modes in VIP:: VIP has three modes, which are orthogonal to modes + in Emacs. +* Differences from Vi:: Differences of VIP from Vi is explained. + + + +File: vip, Node: Basic Concepts, Next: Loading VIP, Prev: Survey, Up: Survey + +Basic Concepts +============== + +We begin by explaining some basic concepts of Emacs. These concepts +are explained in more detail in the GNU Emacs Manual. + +Conceptually, a "buffer" is just a string of ASCII characters and two +special characters PNT ("point") and MRK ("mark") such that the +character PNT occurs exactly once and MRK occurs at most once. The +"text" of a buffer is obtained by deleting the occurrences of PNT and +MRK. If, in a buffer, there is a character following PNT then we say +that point is "looking at" the character; otherwise we say that point +is "at the end of buffer". PNT and MRK are used to indicate +positions in a buffer and they are not part of the text of the +buffer. If a buffer contains a MRK then the text between MRK and PNT +is called the "region" of the buffer. + +Emacs provides (multiple) "windows" on the screen, and you can see +the content of a buffer through the window associated with the +buffer. The cursor of the screen is always positioned on the +character after PNT. + +A "keymap" is a table that records the bindings between characters +and command functions. There is the "global keymap" common to all +the buffers. Each buffer has its "local keymap" that determines the +"mode" of the buffer. Local keymap overrides global keymap, so that +if a function is bound to some key in the local keymap then that +function will be executed when you type the key. If no function is +bound to a key in the local map, however, the function bound to the +key in the global map becomes in effect. + + + +File: vip, Node: Loading VIP, Next: Modes in VIP, Prev: Basic Concepts, Up: Survey + +Loading VIP +=========== + +The recommended way to load VIP automatically is to include the line: + + (load "vip") + +in your `.emacs' file. The `.emacs' file is placed in your home +directory and it will be executed every time you invoke Emacs. If +you wish to be in vi mode whenver Emacs starts up, you can include +the following line in your `.emacs' file instead of the above line: + + (setq term-setup-hook 'vip-mode) + +(*Note Vi Mode::, for the explanation of vi mode.) + +Even if your `.emacs' file does not contain any of the above lines, +you can load VIP and enter vi mode by typing the following from +within Emacs. + + M-x vip-mode + + + +File: vip, Node: Modes in VIP, Next: Emacs Mode, Prev: Loading VIP, Up: Survey + +Modes in VIP +============ + +Loading VIP has the effect of globally binding `C-z' (`Control-z') to +the function `vip-change-mode-to-vi'. The default binding of `C-z' in +GNU Emacs is `suspend-emacs', but, you can also call `suspend-emacs' +by typing `C-x C-z'. Other than this, all the key bindings of Emacs +remain the same after loading VIP. + +Now, if you hit `C-z', the function `vip-change-mode-to-vi' will be +called and you will be in "vi mode". (Some major modes may locally +bind `C-z' to some special functions. In such cases, you can call +`vip-change-mode-to-vi' by `execute-extended-command' which is +invoked by `M-x'. Here `M-x' means `Meta-x', and if your terminal +does not have a META key you can enter it by typing `ESC x'. The +same effect can also be achieve by typing `M-x vip-mode'.) + +You can observe the change of mode by looking at the "mode line". +For instance, if the mode line is: + + -----Emacs: *scratch* (Lisp Interaction)----All------------ + +then it will change to: + + -----Vi: *scratch* (Lisp Interaction)----All------------ + +Thus the word `Emacs' in the mode line will change to `Vi'. + +You can go back to the original "emacs mode" by typing `C-z' in vi +mode. Thus `C-z' toggles between these two modes. + +Note that modes in VIP exist orthogonally to modes in Emacs. This +means that you can be in vi mode and at the same time, say, shell mode. + +Vi mode corresponds to Vi's command mode. From vi mode you can enter +"insert mode" (which corresponds to Vi's insert mode) by usual Vi +command keys like `i', `a', `o' ... etc. + +In insert mode, the mode line will look like this: + + -----Insert *scratch* (Lisp Interaction)----All------------ + +You can exit from insert mode by hitting ESC key as you do in Vi. + +That VIP has three modes may seem very complicated, but in fact it is +not so. VIP is implemented so that you can do most editing remaining +only in the two modes for Vi (that is vi mode and insert mode). + +The figure below shows the transition of three modes in VIP. + + + + === C-z ==> == i,o ... ==> + emacs mode vi mode insert mode + <== X-z === <=== ESC ==== + +* Menu: + +* Emacs Mode:: This is the mode you should know better. +* Vi Mode:: Vi commands are executed in this mode. +* Insert Mode:: You can enter text, and also can do editing if you + know enough Emacs commands. + + + +File: vip, Node: Emacs Mode, Next: Vi Mode, Prev: Modes in VIP, Up: Modes in VIP + +Emacs Mode +---------- + +You will be in this mode just after you loaded VIP. You can do all +normal Emacs editing in this mode. Note that the key `C-z' is +globally bound to `vip-change-mode-to-vi'. So, if you type `C-z' in +this mode then you will be in vi mode. + + + +File: vip, Node: Vi Mode, Next: Insert Mode, Prev: Emacs Mode, Up: Modes in VIP + +Vi Mode +------- + +This mode corresponds to Vi's command mode. Most Vi commands work as +they do in Vi. You can go back to emacs mode by typing `C-z'. You +can enter insert mode, just as in Vi, by typing `i', `a' etc. + + + +File: vip, Node: Insert Mode, Next: Differences from Vi, Prev: Vi Mode, Up: Modes in VIP + +Insert Mode +----------- + +The key bindings in this mode is the same as in the emacs mode except +for the following 4 keys. So, you can move around in the buffer and +change its content while you are in insert mode. + +`ESC' + This key will take you back to vi mode. + +`C-h' + Delete previous character. + +`C-w' + Delete previous word. + +`C-z' + Typing this key has the same effect as typing ESC in emacs mode. + Thus typing `C-z x' in insert mode will have the same effect as + typing `ESC x' in emacs mode. + + + +File: vip, Node: Differences from Vi, Next: Undoing, Prev: Insert Mode, Up: Survey + +Differences from Vi +=================== + +The major differences from Vi are explained below. + +* Menu: + +* Undoing:: You can undo more in VIP. +* Changing:: Commands for changing the text. +* Searching:: Search commands. +* z Command:: You can now use zH, zM and zL as well as z- etc. +* Counts:: Some Vi commands which do not accept a count now + accept one. +* Marking:: You can now mark the current point, beginning of + the buffer etc. +* Region Commands:: You can now give a region as an argument for delete + commands etc. +* New Commands:: Some new commands not available in Vi are added. +* New Bindings:: Bindings of some keys are changed for the + convenience of editing under Emacs. +* Window Commands:: Commands for moving among windows etc. +* Buffer Commands:: Commands for selecting buffers etc. +* File Commands:: Commands for visiting files etc. +* Misc Commands:: Other useful commands. + + + +File: vip, Node: Undoing, Next: Changing, Prev: Differences from Vi, Up: Differences from Vi + +Undoing +------- + +You can repeat undoing by the `.' key. So, `u' will undo a single +change, while `u . . .', for instance, will undo 4 previous changes. +Undo is undoable as in Vi. So the content of the buffer will be the +same before and after `u u'. + + + +File: vip, Node: Changing, Next: Searching, Prev: Undoing, Up: Differences from Vi + +Changing +-------- + +Some commands which change a small number of characters are executed +slightly differently. Thus, if point is at the beginning of a word +`foo' and you wished to change it to `bar' by typing `c w', then VIP +will prompt you for a new word in the minibuffer by the prompt `foo +=> '. You can then enter `bar' followed by RET or ESC to complete +the command. Before you enter RET or ESC you can abort the command +by typing `C-g'. In general, you can abort a partially formed +command by typing `C-g'. + + + +File: vip, Node: Searching, Next: z Command, Prev: Changing, Up: Differences from Vi + +Searching +--------- + +As in Vi, searching is done by `/' and `?'. The string will be +searched literally by default. To invoke a regular expression +search, first execute the search command `/' (or `?') with empty +search string. (I.e, type `/' followed by RET.) A search for empty +string will toggle the search mode between vanilla search and regular +expression search. You cannot give an offset to the search string. +(It is a limitation.) By default, search will wrap around the buffer +as in Vi. You can change this by rebinding the variable +`vip-search-wrap-around'. *Note Customization::, for how to do this. + + + +File: vip, Node: z Command, Next: Counts, Prev: Searching, Up: Differences from Vi + +z Command +--------- + +For those of you who cannot remember which of `z' followed by RET, +`.' and `-' do what. You can also use `z' followed by `H', `M' and +`L' to place the current line in the Home (Middle, and Last) line of +the window. + + + +File: vip, Node: Counts, Next: Marking, Prev: z Command, Up: Differences from Vi + +Counts +------ + +Some Vi commands which do not accept a count now accept one + +`p' +`P' + Given counts, text will be yanked (in Vi's sense) that many + times. Thus `3 p' is the same as `p p p'. + +`o' +`O' + Given counts, that many copies of text will be inserted. Thus `o + a b c ESC' will insert 3 lines of `abc' below the current line. + +`/' +`?' + Given a count N, N-th occurrence will be searched. + + + +File: vip, Node: Marking, Next: Region Commands, Prev: Counts, Up: Differences from Vi + +Marking +------- + +Typing an `m' followed by a lower case character CH marks the point +to the register named CH as in Vi. In addition to these, we have +following key bindings for marking. + +`m <' + Set mark at the beginning of buffer. + +`m >' + Set mark at the end of buffer. + +`m .' + Set mark at point (and push old mark on mark ring). + +`m ,' + Jump to mark (and pop mark off the mark ring). + + + +File: vip, Node: Region Commands, Next: New Commands, Prev: Marking, Up: Differences from Vi + +Region Commands +--------------- + +Vi operators like `d', `c' etc. are usually used in combination with +motion commands. It is now possible to use current region as the +argument to these operators. (A "region" is a part of buffer +delimited by point and mark.) The key `r' is used for this purpose. +Thus `d r' will delete the current region. If `R' is used instead of +`r' the region will first be enlarged so that it will become the +smallest region containing the original region and consisting of +whole lines. Thus `m . d R' will have the same effect as `d d'. + + + +File: vip, Node: New Commands, Next: New Bindings, Prev: Region Commands, Up: Differences from Vi + +Some New Commands +----------------- + +Note that the keys below (except for `R') are not used in Vi. + +`C-a' + Move point to the beginning of line. + +`C-n' + If you have two or more windows in the screen, this key will + move point to the next window. + +`C-o' + Insert a newline and leave point before it, and then enter + insert mode. + +`C-r' + Backward incremental search. + +`C-s' + Forward incremental search. + +`C-c' +`C-x' +`ESC' + These keys will exit from vi mode and return to emacs mode + temporarily. If you hit one of these keys, Emacs will be in + emacs mode and will believe that you hit that key in emacs mode. + For example, if you hit `C-x' followed by `2', then the current + window will be split into 2 and you will be in vi mode again. + +`\' + Escape to emacs mode. Hitting `\' will take you to emacs mode, + and you can execute a single Emacs command. After executing the + Emacs command you will be in vi mode again. You can give a + count before typing `\'. Thus `5 \ *', as well as `\ C-u 5 *', + will insert `*****' before point. Similarly `1 0 \ C-p' will + move the point 10 lines above the current line. + +`K' + Kill current buffer if it is not modified. Useful when you + selected a buffer which you did not want. + +`Q' +`R' + `Q' is for query replace and `R' is for replace. By default, + string to be replaced are treated literally. If you wish to do + a regular expression replace, first do replace with empty string + as the string to be replaced. In this way, you can toggle + between vanilla and regular expression replacement. + +`v' +`V' + These keys are used to Visit files. `v' will switch to a buffer + visiting file whose name can be entered in the minibuffer. `V' + is similar, but will use window different from the current window. + +`#' + If followed by a certain character CH, it becomes an operator + whose argument is the region determined by the motion command + that follows. Currently, CH can be one of `c', `C', `g', `q' + and `s'. + +`# c' + Change upper case characters in the region to lower case + (`downcase-region'). + +`# C' + Change lower case characters in the region to upper case. For + instance, `# C 3 w' will capitalize 3 words from the current + point (`upcase-region'). + +`# g' + Execute last keyboard macro for each line in the region + (`vip-global-execute'). + +`# q' + Insert specified string at the beginning of each line in the + region (`vip-quote-region'). + +`# s' + Check spelling of words in the region (`spell-region'). + +`*' + Call last keyboard macro. + + + +File: vip, Node: New Bindings, Next: Window Commands, Prev: New Commands, Up: Differences from Vi + +New Key Bindings +---------------- + +In VIP the meanings of some keys are entirely different from Vi. +These key bindings are done deliberately in the hope that editing +under Emacs will become easier. It is however possible to rebind +these keys to functions which behave similarly as in Vi. *Note +Customizing Key Bindings::, for details. + +`C-g' +`g' + In Vi, `C-g' is used to get information about the file + associated to the current buffer. Here, `g' will do that, and + `C-g' is used to abort a command (this is for compatibility with + emacs mode.) + +`SPC' +`RET' + Now these keys will scroll up and down the text of current window. + Convenient for viewing the text. + +`s' +`S' + They are used to switch to a specified buffer. Useful for + switching to already existing buffer since buffer name + completion is provided. Also a default buffer will be given as + part of the prompt, to which you can switch by just typing RET + key. `s' is used to select buffer in the current window, while + `S' selects buffer in another window. + +`C' +`X' + These keys will exit from vi mode and return to emacs mode + temporarily. If you type `C' (`X'), Emacs will be in emacs mode + and will believe that you have typed `C-c' (`C-x', resp.) in + emacs mode. Moreover, if the following character you type is an + upper case letter, then Emacs will believe that you have typed + the corresponding control character. You will be in vi mode + again after the command is executed. For example, typing `X S' + in vi mode is the same as typing `C-x C-s' in emacs mode. You + get the same effect by typing `C-x C-s' in vi mode, but the idea + here is that you can execute useful Emacs commands without + typing control characters. For example, if you hit `X' (or + `C-x') followed by `2', then the current window will be split + into 2 and you will be in vi mode again. + +In addition to these, `ctl-x-map' is slightly modified: + +`X 3' +`C-x 3' + This is equivalent to `C-x 1 C-x 2' (1 + 2 = 3). + + + +File: vip, Node: Window Commands, Next: Buffer Commands, Prev: New Bindings, Up: Differences from Vi + +Window Commands +--------------- + +In this and following subsections, we give a summary of key bindings +for basic functions related to windows, buffers and files. + +`C-n' + Switch to next window. + +`X 1' +`C-x 1' + Delete other windows. + +`X 2' +`C-x 2' + Split current window into two windows. + +`X 3' +`C-x 3' + Show current buffer in two windows. + + + +File: vip, Node: Buffer Commands, Next: File Commands, Prev: Window Commands, Up: Differences from Vi + +Buffer Commands +--------------- + +`s' + Switch to the specified buffer in the current window + (`vip-switch-to-buffer'). + +`S' + Switch to the specified buffer in another window + (`vip-switch-to-buffer-other-window'). + +`K' + Kill the current buffer if it is not modified. + +`X S' +`C-x C-s' + Save the current buffer in the file associated to the buffer. + + + +File: vip, Node: File Commands, Next: Misc Commands, Prev: Buffer Commands, Up: Differences from Vi + +File Commands +------------- + +`v' + Visit specified file in the current window. + +`V' + Visit specified file in another window. + +`X W' +`C-x C-w' + Write current buffer into the specified file. + +`X I' +`C-x C-i' + Insert specified file at point. + + + +File: vip, Node: Misc Commands, Next: Vi Commands, Prev: File Commands, Up: Differences from Vi + +Miscellaneous Commands +---------------------- + +`X (' +`C-x (' + Start remembering keyboard macro. + +`X )' +`C-x )' + Finish remembering keyboard macro. + +`*' + Call last remembered keyboard macro. + +`X Z' +`C-x C-z' + Suspend Emacs. + +`Z Z' + Exit Emacs. + +`Q' + Query replace. + +`R' + Replace. + + + +File: vip, Node: Vi Commands, Next: Numeric Arguments, Prev: Misc Commands, Up: Top + +Vi Commands +*********** + +This chapter describes Vi commands other than Ex commands implemented +in VIP. Except for the last section which discusses insert mode, all +the commands described in this chapter are to be used in vi mode. + +* Menu: + +* Numeric Arguments:: Many commands accept numeric arguments +* Important Keys:: Some very important keys. +* Buffers and Windows:: Commands for handling buffers and windows. +* Files:: Commands for handling files. +* Viewing the Buffer:: How you can view the current buffer. +* Mark Commands:: Marking positions in a buffer. +* Motion Commands:: Commands for moving point. +* Modifying Commands:: Commands for modifying the buffer. + + + +File: vip, Node: Numeric Arguments, Next: Important Keys, Prev: Vi Commands, Up: Vi Commands + +Numeric Arguments +================= + +Most Vi commands accept a "numeric argument" which can be supplied as +a prefix to the commands. A numeric argument is also called a "count". +In many cases, if a count is given, the command is executed that many +times. For instance, `5 d d' deletes 5 lines while simple `d d' +deletes a line. In this manual the metavariable N will denote a count. + + + +File: vip, Node: Important Keys, Next: Buffers and Windows, Prev: Numeric Arguments, Up: Vi Commands + +Important Keys +============== + +The keys `C-g' and `C-l' are unique in that their associated +functions are the same in any of emacs, vi and insert mode. + +`C-g' + Quit. Cancel running or partially typed command + (`keyboard-quit'). + +`C-l' + Clear the screen and reprint everything (`recenter'). + +In Emacs many commands are bound to the key strokes that start with +`C-x', `C-c' and ESC. These commands can be accessed from vi mode as +easily as from emacs mode. + +`C-x' +`C-c' +`ESC' + Typing one of these keys have the same effect as typing it in + emacs mode. Appropriate command will be executed according as + the keys you type after it. You will be in vi mode again after + the execution of the command. For instance, if you type `ESC <' + (in vi mode) then the cursor will move to the beginning of the + buffer and you will still be in vi mode. + +`C' +`X' + Typing one of these keys have the effect of typing the + corresponding control character in emacs mode. Moreover, if you + type an upper case character following it, that character will + also be translated to the corresponding control character. Thus + typing `X W' in vi mode is the same as typing `C-x C-w' in emacs + mode. You will be in vi mode again after the execution of a + command. + +`\' + Escape to emacs mode. Hitting the `\' key will take you to + emacs mode, and you can execute a single Emacs command. After + executing the Emacs command you will be in vi mode again. You + can give a count before typing `\'. Thus `5 \ +', as well as `\ + C-u 5 +', will insert `+++++' before point. + + + +File: vip, Node: Buffers and Windows, Next: Files, Prev: Important Keys, Up: Vi Commands + +Buffers and Windows +=================== + +In Emacs the text you edit is stored in a "buffer". See GNU Emacs +Manual, for details. There is always one "selected" buffer which is +called the "current buffer". + +You can see the contents of buffers through "windows" created by Emacs. +When you have multiple windows on the screen only one of them is +selected. Each buffer has a unique name, and each window has a mode +line which shows the name of the buffer associated with the window +and other information about the status of the buffer. You can change +the format of the mode line, but normally if you see `**' at the +beginning of a mode line it means that the buffer is "modified". If +you write out the content of the buffer to a file, then the buffer +will become not modified. Also if you see `%%' at the beginning of +the mode line, it means that the file associated with the buffer is +write protected. + +We have the following commands related to windows and buffers. + +`C-n' + Move cursor to the next-window (`vip-next-window'). + +`X 1' + Delete other windows and make the selected window fill the screen + (`delete-other-windows'). + +`X 2' + Split current window into two windows (`split-window-vertically'). + +`X 3' + Show current buffer in two windows. + +`s BUFFER RET' + Select or create a buffer named BUFFER (`vip-switch-to-buffer'). + +`S BUFFER RET' + Similar but select a buffer named BUFFER in another window + (`vip-switch-to-buffer-other-window'). + +`K' + Kill the current buffer if it is not modified or if it is not + associated with a file + (`vip-kill-buffer'). + +`X B' + List the existing buffers (`list-buffers'). + +As "buffer name completion" is provided, you have only to type in +initial substring of the buffer name which is sufficient to identify +it among names of existing buffers. After that, if you hit TAB the +rest of the buffer name will be supplied by the system, and you can +confirm it by RET. The default buffer name to switch to will also be +prompted, and you can select it by giving a simple RET. See GNU +Emacs Manual for details of completion. + + + +File: vip, Node: Files, Next: Viewing the Buffer, Prev: Buffers and Windows, Up: Vi Commands + +Files +===== + +We have the following commands related to files. They are used to +visit, save and insert files. + +`v FILE RET' + Visit specified file in the current window (`vip-find-file'). + +`V FILE RET' + Visit specified file in another window + (`vip-find-file-other-window'). + +`X S' + Save current buffer to the file associated with the buffer. If + no file is associated with the buffer, the name of the file to + write out the content of the buffer will be asked in the + minibuffer. + +`X W FILE RET' + Write current buffer into a specified file. + +`X I FILE RET' + Insert a specified file at point. + +`g' + Give information on the file associated with the current buffer. + Tell you the name of the file associated with the buffer, the + line number of the current point and total line numbers in the + buffer. If no file is associated with the buffer, this fact + will be indicated by the null file name `""'. + +In Emacs, you can edit a file by "visiting" it. If you wish to visit +a file in the current window, you can just type `v'. Emacs maintains +the "default directory" which is specific to each buffer. Suppose, +for instance, that the default directory of the current buffer is +`/usr/masahiko/lisp/'. Then you will get the following prompt in the +minibuffer. + + visit file: /usr/masahiko/lisp/ + +If you wish to visit, say, `vip.el' in this directory, then you can +just type `vip.el' followed by RET. If the file `vip.el' already +exists in the directory, Emacs will visit that file, and if not, the +file will be created. Emacs will use the file name (`vip.el', in +this case) as the name of the buffer visiting the file. In order to +make the buffer name unique, Emacs may append `<2>', `<3>' etc., to +the buffer name. As the "file name completion" is provided here, you +can sometime save typing. For instance, suppose there is only one +file in the default directory whose name starts with `v', that is +`vip.el'. Then if you just type `v TAB' then it will be completed to +`vip.el'. Thus, in this case, you just have to type `v v TAB RET' to +visit `/usr/masahiko/lisp/vip.el'. Continuing the example, let us +now suppose that you wished to visit the file +`/usr/masahiko/man/vip.texinfo'. Then to the same prompt which you +get after you typed `v', you can enter +`/usr/masahiko/man/vip.texinfo' or `../man/vip.texinfo' followed by +RET. + +Use `V' instead of `v', if you wish to visit a file in another window. + +You can verify which file you are editing by typing `g'. (You can +also type `X B' to get nformation on other buffers too.) If you type +`g' you will get an information like below in the echo area: + + "/usr/masahiko/man/vip.texinfo" line 921 of 1949 + +After you edited the buffer (`vip.texinfo', in our example) for a +while, you may wish to save it in a file. If you wish to save it in +the file associated with the buffer (`/usr/masahiko/man/vip.texinfo', +in this case), you can just say `X S'. If you wish to save it in +another file, you can type `X W'. You will then get a similar prompt +as you get for `v', to which you can enter the file name. + + + +File: vip, Node: Viewing the Buffer, Next: Mark Commands, Prev: Files, Up: Vi Commands + +Viewing the Buffer +================== + +In this and next section we discuss commands for moving around in the +buffer. These command do not change the content of the buffer. The +following commands are useful for viewing the content of the current +buffer. + +`SPC' +`C-f' + Scroll text of current window upward almost full screen. You + can go forward in the buffer by this command (`vip-scroll'). + +`RET' +`C-b' + Scroll text of current window downward almost full screen. You + can go backward in the buffer by this command (`vip-scroll-back'). + +`C-d' + Scroll text of current window upward half screen. You can go + down in the buffer by this command (`vip-scroll-down'). + +`C-u' + Scroll text of current window downward half screen. You can go + up in the buffer by this command (`vip-scroll-up'). + +`C-y' + Scroll text of current window upward by one line + (`vip-scroll-down-one'). + +`C-e' + Scroll text of current window downward by one line + (`vip-scroll-up-one'). + +You can repeat these commands by giving a count. Thus, `2 SPC' has +the same effect as `SPC SPC'. + +The following commands reposition point in the window. + +`z H' +`z RET' + Put point on the top (home) line in the window. So the current + line becomes the top line in the window. Given a count N, point + will be placed in the N-th line from top (`vip-line-to-top'). + +`z M' +`z .' + Put point on the middle line in the window. Given a count N, + point will be placed in the N-th line from the middle line + (`vip-line-to-middle'). + +`z L' +`z -' + Put point on the bottom line in the window. Given a count N, + point will be placed in the N-th line from bottom + (`vip-line-to-bottom'). + +`C-l' + Center point in window and redisplay screen (`recenter'). + + + +File: vip, Node: Mark Commands, Next: Motion Commands, Prev: Viewing the Buffer, Up: Vi Commands + +Mark Commands +============= + +The following commands are used to mark positions in the buffer. + +`m CH' + Store current point in the register CH. CH must be a lower case + character between `a' and `z'. + +`m <' + Set mark at the beginning of current buffer. + +`m >' + Set mark at the end of current buffer. + +`m .' + Set mark at point. + +`m ,' + Jump to mark (and pop mark off the mark ring). + +Emacs uses the "mark ring" to store marked positions. The commands +`m <', `m >' and `m .' not only set mark but also add it as the +latest element of the mark ring (replacing the oldest one). By +repeating the command ``m ,'' you can visit older and older marked +positions. You will eventually be in a loop as the mark ring is a +ring. + + + +File: vip, Node: Motion Commands, Next: Searching and Replacing, Prev: Mark Commands, Up: Vi Commands + +Motion Commands +=============== + +Commands for moving around in the current buffer are collected here. +These commands are used as an `argument' for the delete, change and +yank commands to be described in the next section. + +`h' + Move point backward by one character. Signal error if point is + at the beginning of buffer, but (unlike Vi) do not complain + otherwise (`vip-backward-char'). + +`l' + Move point backward by one character. Signal error if point is + at the end of buffer, but (unlike Vi) do not complain otherwise + (`vip-forward-char'). + +`j' + Move point to the next line keeping the current column. If + point is on the last line of the buffer, a new line will be + created and point will move to that line (`vip-next-line'). + +`k' + Move point to the previous line keeping the current column + (`vip-next-line'). + +`+' + Move point to the next line at the first non-white character. + If point is on the last line of the buffer, a new line will be + created and point will move to the beginning of that line + (`vip-next-line-at-bol'). + +`-' + Move point to the previous line at the first non-white character + (`vip-previous-line-at-bol'). + +If a count is given to these commands, the commands will be repeated +that many times. + +`0' + Move point to the beginning of line (`vip-beginning-of-line'). + +`^' + Move point to the first non-white character on the line + (`vip-bol-and-skip-white'). + +`$' + Move point to the end of line (`vip-goto-eol'). + +`N |' + Move point to the N-th column on the line (`vip-goto-col'). + +Except for the `|' command, these commands neglect a count. + +`w' + Move point forward to the beginning of the next word + (`vip-forward-word'). + +`W' + Move point forward to the beginning of the next word, where a + "word" is considered as a sequence of non-white characters + (`vip-forward-Word'). + +`b' + Move point backward to the beginning of a word + (`vip-backward-word'). + +`B' + Move point backward to the beginning of a word, where a word is + considered as a sequence of non-white characters + (`vip-forward-Word'). + +`e' + Move point forward to the end of a word (`vip-end-of-word'). + +`E' + Move point forward to the end of a word, where a word is + considered as a sequence of non-white characters + (`vip-end-of-Word'). + +Here the meaning of the word `word' for the `w', `b' and `e' commands +is determined by the "syntax table" effective in the current buffer. +Each major mode has its syntax mode, and therefore the meaning of a +word also changes as the major mode changes. See GNU Emacs Manual +for details of syntax table. + +`H' + Move point to the beginning of the home (top) line of the window. + Given a count N, go to the N-th line from top (`vip-window-top'). + +`M' + Move point to the beginning of the middle line of the window. + Given a count N, go to the N-th line from the middle line + (`vip-window-middle'). + +`L' + Move point to the beginning of the lowest (bottom) line of the + window. Given count, go to the N-th line from bottom + (`vip-window-bottom'). + +These commands can be used to go to the desired line visible on the +screen. + +`(' + Move point backward to the beginning of the sentence + (`vip-backward-sentence'). + +`)' + Move point forward to the end of the sentence + (`vip-forward-sentence'). + +`{' + Move point backward to the beginning of the paragraph + (`vip-backward-paragraph'). + +`}' + Move point forward to the end of the paragraph + (`vip-forward-paragraph'). + +A count repeats the effect for these commands. + +`G' + Given a count N, move point to the N-th line in the buffer on + the first non-white character. Without a count, go to the end + of the buffer (`vip-goto-line'). + +`` `' + Exchange point and mark (`vip-goto-mark'). + +`` CH' + Move point to the position stored in the register CH. CH must + be a lower case letter. + +`' '' + Exchange point and mark, and then move point to the first + non-white character on the line (`vip-goto-mark-and-skip-white'). + +`' CH' + Move point to the position stored in the register CH and skip to + the first non-white character on the line. CH must be a lower + case letter. + +`%' + Move point to the matching parenthesis if point is looking at + `(', `)', `{', `}', `[' or `]' + (`vip-paren-match'). + +The command `G' mark point before move, so that you can return to the +original point by `` `'. The original point will also be stored in +the mark ring. + +The following commands are useful for moving points on the line. A +count will repeat the effect. + +`f CH' + Move point forward to the character CH on the line. Signal + error if CH could not be found (`vip-find-char-forward'). + +`F CH' + Move point backward to the character CH on the line. Signal + error if CH could not be found (`vip-find-char-backward'). + +`t CH' + Move point forward upto the character CH on the line. Signal + error if CH could not be found (`vip-goto-char-forward'). + +`T CH' + Move point backward upto the character CH on the line. Signal + error if CH could not be found (`vip-goto-char-backward'). + +`;' + Repeat previous `f', `t', `F' or `T' command (`vip-repeat-find'). + +`,' + Repeat previous `f', `t', `F' or `T' command, in the opposite + direction (`vip-repeat-find-opposite'). + + + +File: vip, Node: Searching and Replacing, Next: Modifying Commands, Prev: Motion Commands, Up: Vi Commands + +Searching and Replacing +======================= + +Following commands are available for searching and replacing. + +`/ STRING RET' + Search the first occurrence of the string STRING forward + starting from point. Given a count N, the N-th occurrence of + STRING will be searched. If the variable `vip-re-search' has + value `t' then "regular expression" search is done and the + string matching the regular expression STRING is found. If you + give an empty string as STRING then the search mode will change + from vanilla search to regular expression search and vice versa + (`vip-search-forward'). + +`? STRING RET' + Same as `/', except that search is done backward + (`vip-search-backward'). + +`n' + Search the previous search pattern in the same direction as + before (`vip-search-next'). + +`N' + Search the previous search pattern in the opposite direction + (`vip-search-Next'). + +`C-s' + Search forward incrementally. See GNU Emacs Manual for details + (`isearch-forward'). + +`C-r' + Search backward incrementally (`isearch-backward'). + +`R STRING RET NEWSTRING' + There are two modes of replacement, "vanilla" and "regular + expression". If the mode is vanilla you will get a prompt + `Replace string:', and if the mode is regular expression you + will ge a prompt `Replace regexp:'. The mode is initially + vanilla, but you can toggle these modes by giving a null string + as STRING. If the mode is vanilla, this command replaces every + occurrence of STRING with NEWSTRING. If the mode is regular + expression, STRING is treated as a regular expression and every + string matching the regular expression is replaced with + NEWSTRING (`vip-replace-string'). + +`Q STRING RET NEWSTRING' + Same as `R' except that you will be asked form confirmation + before each replacement + (`vip-query-replace'). + +`r CH' + Replace the character point is looking at by the character CH. + Give count, replace that many characters by CH + (`vip-replace-char'). + +The commands `/' and `?' mark point before move, so that you can +return to the original point by `` `'. + + + +File: vip, Node: Modifying Commands, Next: Delete Commands, Prev: Searching and Replacing, Up: Vi Commands + +Modifying Commands +================== + +In this section, commands for modifying the content of a buffer are +described. These commands affect the region determined by a motion +command which is given to the commands as their argument. + +We classify motion commands into "point commands" and "line +commands". The point commands are as follows: + + `h', `l', `0', `^', `$', `w', `W', `b', `B', `e', `E', `(', `)', `/', `?', ``', `f', `F', `t', `T', `%', `;', `,' + +The line commands are as follows: + + `j', `k', `+', `-', `H', `M', `L', `{', `}', `G', `'' + +If a point command is given as an argument to a modifying command, +the region determined by the point command will be affected by the +modifying command. On the other hand, if a line command is given as +an argument to a modifying command, the region determined by the line +command will be enlarged so that it will become the smallest region +properly containing the region and consisting of whole lines (we call +this process "expanding the region"), and then the enlarged region +will be affected by the modifying command. + +* Menu: + +* Delete Commands:: Commands for deleting text. +* Yank Commands:: Commands for yanking text in Vi's sense. +* Put Back Commands:: Commands for putting bake deleted/yanked text. +* Change Commands:: Commands for changing text. + + + +File: vip, Node: Delete Commands, Next: Yank Commands, Prev: Modifying Commands, Up: Modifying Commands + +Delete Commands +--------------- + +`d MOTION-COMMAND' + Delete the region determined by the motion command MOTION-COMMAND. + +For example, `d $' will delete the region between point and end of +current line since `$' is a point command that moves point to end of +line. `d G' will delete the region between the beginning of current +line and end of the buffer, since `G' is a line command. A count +given to the command above will become the count for the associated +motion command. Thus, `3 d w' will delete three words. + +It is also possible to save the deleted text into a register you +specify. For example, you can say `" t 3 d w' to delete three words +and save it to register `t'. The name of a register is a lower case +letter between `a' and `z'. If you give an upper case letter as an +argument to a delete command, then the deleted text will be appended +to the content of the register having the corresponding lower case +letter as its name. So, `" T d w' will delete a word and append it +to register `t'. Other modifying commands also accept a register +name as their argument, and we will not repeat similar explanations. + +We have more delete commands as below. + +`d d' + Delete a line. Given a count N, delete N lines. + +`d r' + Delete current region. + +`d R' + Expand current region and delete it. + +`D' + Delete to the end of a line (`vip-kill-line'). + +`x' + Delete a character after point. Given N, delete N characters + (`vip-delete-char'). + +`DEL' + Delete a character before point. Given N, delete N characters + (`vip-delete-backward-char'). + + + +File: vip, Node: Yank Commands, Next: Put Back Commands, Prev: Delete Commands, Up: Modifying Commands + +Yank Commands +------------- + +Yank commands "yank" a text of buffer into a (usually anonymous) +register. Here the word `yank' is used in Vi's sense. Thus yank +commands do not alter the content of the buffer, and useful only in +combination with commands that put back the yanked text into the +buffer. + +`y MOTION-COMMAND' + Yank the region determined by the motion command MOTION-COMMAND. + +For example, `y $' will yank the text between point and the end of +line into an anonymous register, while `"c y $' will yank the same +text into register `c'. + +Use the following command to yank consecutive lines of text. + +`y y' +`Y' + Yank a line. Given N, yank N lines (`vip-yank-line'). + +`y r' + Yank current region. + +`y R' + Expand current region and yank it. + + + +File: vip, Node: Put Back Commands, Next: Change Commands, Prev: Yank Commands, Up: Modifying Commands + +Put Back Commands +----------------- + +Deleted or yanked texts can be put back into the buffer by the +command below. + +`p' + Insert, after the character point is looking at, most recently + deleted/yanked text from anonymous register. Given a register + name argument, the content of the named register will be put + back. Given a count, the command will be repeated that many + times. This command also checks if the text to put back ends + with a new line character, and if so the text will be put below + the current line (`vip-put-back'). + +`P' + Insert at point most recently deleted/yanked text from anonymous + register. Given a register name argument, the content of the + named register will be put back. Given a count, the command + will be repeated that many times. This command also checks if + the text to put back ends with a new line character, and if so + the text will be put above the current line rather than at point + (`vip-Put-back'). + +Thus, `" c p' will put back the content of the register `c' into the +buffer. It is also possible to specify "number register" which is a +numeral between `1' and `9'. If the number register N is specified, +N-th previously deleted/yanked text will be put back. It is an error +to specify a number register for the delete/yank commands. + + + +File: vip, Node: Change Commands, Next: Repeating and Undoing Modifications, Prev: Put Back Commands, Up: Modifying Commands + +Change Commands +--------------- + +Most commonly used change command takes the following form. + +`c MOTION-COMMAND' + Replace the content of the region determined by the motion + command MOTION-COMMAND by the text you type. If the motion + command is a point command then you will type the text into + minibuffer, and if the motion command is a line command then the + region will be deleted first and you can insert the text in + INSERT MODE. + +For example, if point is at the beginning of a word `foo' and you +wish to change it to `bar', you can type `c w'. Then, as `w' is a +point command, you will get the prompt `foo =>' in the minibuffer, +for which you can type `b a r RET' to complete the change command. + +`c c' + Change a line. Given a count, that many lines are changed. + +`c r' + Change current region. + +`c R' + Expand current region and change it. + + + +File: vip, Node: Repeating and Undoing Modifications, Next: Other Vi Commands, Prev: Change Commands, Up: Modifying Commands + +Repeating and Undoing Modifications +----------------------------------- + +VIP records the previous modifying command, so that it is easy to +repeat it. It is also very easy to undo changes made by modifying +commands. + +`u' + Undo the last change. You can undo more by repeating undo by + the repeat command `.'. For example, you can undo 5 previous + changes by typing `u....'. If you type `uu', then the second + `u' undoes the first undo command (`vip-undo'). + +`.' + Repeat the last modifying command. Given count N it becomes the + new count for the repeated command. Otherwise, the count for + the last modifying command is used again (`vip-repeat'). + + + +File: vip, Node: Other Vi Commands, Next: Commands in Insert Mode, Prev: Repeating and Undoing Modifications, Up: Vi Commands + +Other Vi Commands +================= + +Miscellaneous Vi commands are collected here. + +`Z Z' + Exit Emacs. If modified buffers exist, you will be asked + whether you wish to save them or not (`save-buffers-kill-emacs'). + +`! MOTION-COMMAND FORMAT-COMMAND' +`N ! ! FORMAT-COMMAND' + The region determined by the motion command MOTION-COMMAND will + be given to the shell command FORMAT-COMMAND and the region will + be replaced by its output. If a count is given, it will be + passed to MOTION-COMMAND. For example, `3!Gsort' will sort the + region between point and the 3rd line. If `!' is used instead + of MOTION-COMMAND then N lines will be processed by + FORMAT-COMMAND (`vip-command-argument'). + +`J' + Join two lines. Given count, join that many lines. A space + will be inserted at each junction (`vip-join-lines'). + +`< MOTION-COMMAND' +`N < <' + Shift region determined by the motion command MOTION-COMMAND to + left by SHIFT-WIDTH (default is 8). If `<' is used instead of + MOTION-COMMAND then shift N lines + (`vip-command-argument'). + +`> MOTION-COMMAND' +`N > >' + Shift region determined by the motion command MOTION-COMMAND to + right by SHIFT-WIDTH (default is 8). If `<' is used instead of + MOTION-COMMAND then shift N lines + (`vip-command-argument'). + +`= MOTION-COMMAND' + Indent region determined by the motion command MOTION-COMMAND. + If `=' is used instead of MOTION-COMMAND then indent N lines + (`vip-command-argument'). + +`*' + Call last remembered keyboard macro. + +`#' + A new vi operator. *Note New Commands::, for more details. + +The following keys are reserved for future extensions, and currently +assigned to a function that just beeps (`vip-nil'). + + &, @, U, [, ], _, q, ~ + +VIP uses a special local keymap to interpret key strokes you enter in +vi mode. The following keys are bound to NIL in the keymap. +Therefore, these keys are interpreted by the global keymap of Emacs. +We give below a short description of the functions bound to these +keys in the global keymap. See GNU Emacs Manual for details. + +`C-@' + Set mark and push previous mark on mark ring (`set-mark-command'). + +`TAB' + Indent line for current major mode (`indent-for-tab-command'). + +`LFD' + Insert a newline, then indent according to mode + (`newline-and-indent'). + +`C-k' + Kill the rest of the current line; before a newline, kill the + newline. With prefix argument, kill that many lines from point. + Negative arguments kill lines backward (`kill-line'). + +`C-l' + Clear the screen and reprint everything (`recenter'). + +`N C-p' + Move cursor vertically up N lines (`previous-line'). + +`C-q' + Read next input character and insert it. Useful for inserting + control characters + (`quoted-insert'). + +`C-r' + Search backward incrementally (`isearch-backward'). + +`C-s' + Search forward incrementally (`isearch-forward'). + +`N C-t' + Interchange charcters around point, moving forward one + character. With count N, take character before point and drag + it forward past N other characters. If no argument and at end + of line, the previous two characters are exchanged + (`transpose-chars'). + +`N C-v' + Scroll text upward N lines. If N is not given, scroll near full + screen (`scroll-up'). + +`C-w' + Kill between point and mark. The text is save in the kill ring. + The command `P' or `p' can retrieve it from kill ring + (`kill-region'). + + |