123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909 |
- *intro.txt* For Vim version 9.0. Last change: 2022 Nov 20
- VIM REFERENCE MANUAL by Bram Moolenaar
- Introduction to Vim *ref* *reference*
- 1. Introduction |intro|
- 2. Vim on the internet |internet|
- 3. Credits |credits|
- 4. Notation |notation|
- 5. Modes, introduction |vim-modes-intro|
- 6. Switching from mode to mode |mode-switching|
- 7. The window contents |window-contents|
- 8. Definitions |definitions|
- ==============================================================================
- 1. Introduction *intro*
- Vim stands for Vi IMproved. It used to be Vi IMitation, but there are so many
- improvements that a name change was appropriate. Vim is a text editor which
- includes almost all the commands from the Unix program "Vi" and a lot of new
- ones. It is very useful for editing programs and other plain text.
- All commands are given with the keyboard. This has the advantage that you
- can keep your fingers on the keyboard and your eyes on the screen. For those
- who want it, there is mouse support and a GUI version with scrollbars and
- menus (see |gui.txt|).
- An overview of this manual can be found in the file "help.txt", |help.txt|.
- It can be accessed from within Vim with the <Help> or <F1> key and with the
- |:help| command (just type ":help", without the bars or quotes).
- The 'helpfile' option can be set to the name of the help file, in case it
- is not located in the default place. You can jump to subjects like with tags:
- Use CTRL-] to jump to a subject under the cursor, use CTRL-T to jump back.
- The differences between Vi and Vim are mentioned in |vi_diff.txt|.
- This manual refers to Vim on various machines. There may be small differences
- between different computers and terminals. Besides the remarks given in this
- document, there is a separate document for each supported system, see
- |sys-file-list|.
- *pronounce*
- Vim is pronounced as one word, like Jim, not vi-ai-em. It's written with a
- capital, since it's a name, again like Jim.
- This manual is a reference for all the Vim commands and options. This is not
- an introduction to the use of Vi or Vim, it gets a bit complicated here and
- there. For beginners, there is a hands-on |tutor|. To learn using Vim, read
- the user manual |usr_toc.txt|.
- *book* *books*
- Most books on Vi and Vim contain a section for beginners. Others are spending
- more words on specific functionality. You can find an overview of Vim books
- here:
- http://iccf-holland.org/vim_books.html
- ==============================================================================
- 2. Vim on the internet *internet*
- *www* *WWW* *faq* *FAQ* *distribution* *download*
- The Vim pages contain the most recent information about Vim. They also
- contain links to the most recent version of Vim. The FAQ is a list of
- Frequently Asked Questions. Read this if you have problems.
- Vim home page: https://www.vim.org/
- Vim FAQ: https://vimhelp.org/vim_faq.txt.html
- Downloading: https://www.vim.org/download.php
- Asking questions, finding answers: https://vi.stackexchange.com/
- "Vi and Vim Stack Exchange is a question and answer site for people using the
- vi and Vim families of text editors"
- Usenet News group where Vim is discussed: *news* *usenet*
- comp.editors
- This group is also for other editors. If you write about Vim, don't forget to
- mention that.
- You can access it here:
- https://groups.google.com/forum/#!topic/comp.editors
- *mail-list* *maillist*
- There are several mailing lists for Vim:
- <vim@vim.org> *vim-use* *vim_use*
- For discussions about using existing versions of Vim: Useful mappings,
- questions, answers, where to get a specific version, etc. There are
- quite a few people watching this list and answering questions, also
- for beginners. Don't hesitate to ask your question here.
- <vim-dev@vim.org> *vim-dev* *vim_dev* *vimdev*
- For discussions about changing Vim: New features, porting, patches,
- beta-test versions, etc.
- <vim-announce@vim.org> *vim-announce* *vim_announce*
- Announcements about new versions of Vim; also for beta-test versions
- and ports to different systems. This is a read-only list.
- <vim-mac@vim.org> *vim-mac* *vim_mac*
- For discussions about using and improving the Macintosh version of
- Vim.
- See http://www.vim.org/maillist.php for the latest information.
- NOTE:
- - Anyone can see the archive, e.g. on Google groups. Search this if you have
- questions.
- - You can only send messages to these lists if you have subscribed!
- - The first message is moderated, thus it may take a few hours to show up.
- - You need to send the messages from the same location as where you subscribed
- from (to avoid spam mail).
- *subscribe-maillist*
- If you want to join, send a message to
- <vim-subscribe@vim.org>
- Make sure that your "From:" address is correct. Then the list server will
- give you help on how to subscribe.
- *maillist-archive*
- For more information and archives look on the Vim maillist page:
- http://www.vim.org/maillist.php
- Bug reports: *bugs* *bug-reports* *bugreport.vim*
- There are three ways to report bugs:
- 1. For issues with runtime files, look in the header for an email address or
- any other way to report it to the maintainer.
- 2. Open an issue on GitHub: https://github.com/vim/vim/issues
- The text will be forwarded to the vim-dev maillist.
- 3. Send bug reports to: Vim Developers <vim-dev@vim.org>
- This is a maillist, you need to become a member first and many people will
- see the message. If you don't want that, e.g. because it is a security
- issue, send it to <bugs@vim.org>, this only goes to the Vim maintainer
- (that's Bram).
- Please be brief; all the time that is spent on answering mail is subtracted
- from the time that is spent on improving Vim! Always give a reproducible
- example and try to find out which settings or other things trigger the bug.
- Preferably start Vim with: >
- vim --clean -u reproduce.vim
- Where reproduce.vim is a script that reproduces the problem. Try different
- machines, if relevant (is this an MS-Windows specific bug perhaps?).
- Send me patches if you can! If you create a pull request on
- https://github.com/vim/vim then the automated checks will run and report any
- obvious problems. But you can also send the patch by email (use an attachment
- to avoid white space changes).
- It will help to include information about the version of Vim you are using and
- your setup. You can get the information with this command: >
- :so $VIMRUNTIME/bugreport.vim
- This will create a file "bugreport.txt" in the current directory, with a lot
- of information of your environment. Before sending this out, check if it
- doesn't contain any confidential information!
- If Vim crashes, please try to find out where. You can find help on this here:
- |debug.txt|.
- In case of doubt or when you wonder if the problem has already been fixed but
- you can't find a fix for it, become a member of the vim-dev maillist and ask
- your question there. |maillist|
- *year-2000* *Y2K*
- Since Vim internally doesn't use dates for editing, there is no year 2000
- problem to worry about. Vim does use the time in the form of seconds since
- January 1st 1970. It is used for a time-stamp check of the edited file and
- the swap file, which is not critical and should only cause warning messages.
- There might be a year 2038 problem, when the seconds don't fit in a 32 bit int
- anymore. This depends on the compiler, libraries and operating system.
- Specifically, time_t and the ctime() function are used. And the time_t is
- stored in four bytes in the swap file. But that's only used for printing a
- file date/time for recovery, it will never affect normal editing.
- The Vim strftime() function directly uses the strftime() system function.
- localtime() uses the time() system function. getftime() uses the time
- returned by the stat() system function. If your system libraries are year
- 2000 compliant, Vim is too.
- The user may create scripts for Vim that use external commands. These might
- introduce Y2K problems, but those are not really part of Vim itself.
- ==============================================================================
- 3. Credits *credits* *author* *Bram* *Moolenaar*
- Most of Vim was created by Bram Moolenaar <Bram@vim.org>.
- Parts of the documentation come from several Vi manuals, written by:
- W.N. Joy
- Alan P.W. Hewett
- Mark Horton
- The Vim editor is based on Stevie and includes (ideas from) other software,
- worked on by the people mentioned here. Other people helped by sending me
- patches, suggestions and giving feedback about what is good and bad in Vim.
- Vim would never have become what it is now, without the help of these people!
- Ron Aaron Win32 GUI changes
- Mohsin Ahmed encryption
- Zoltan Arpadffy work on VMS port
- Tony Andrews Stevie
- Gert van Antwerpen changes for DJGPP on MS-DOS
- Berkeley DB(3) ideas for swap file implementation
- Keith Bostic Nvi
- Walter Briscoe Makefile updates, various patches
- Ralf Brown SPAWNO library for MS-DOS
- Robert Colon many useful remarks
- Marcin Dalecki GTK+ GUI port, toolbar icons, gettext()
- Kayhan Demirel sent me news in Uganda
- Chris & John Downey xvi (ideas for multi-windows version)
- Henk Elbers first VMS port
- Daniel Elstner GTK+ 2 port
- Eric Fischer Mac port, 'cindent', and other improvements
- Benji Fisher Answering lots of user questions
- Bill Foster Athena GUI port (later removed)
- Google Lets me work on Vim one day a week
- Loic Grenie xvim (ideas for multi windows version)
- Sven Guckes Vim promoter and previous WWW page maintainer
- Darren Hiebert Exuberant ctags
- Jason Hildebrand GTK+ 2 port
- Bruce Hunsaker improvements for VMS port
- Andy Kahn Cscope support, GTK+ GUI port
- Oezguer Kesim Maintainer of Vim Mailing Lists
- Axel Kielhorn work on the Macintosh port
- Steve Kirkendall Elvis
- Roger Knobbe original port to Windows NT
- Sergey Laskavy Vim's help from Moscow
- Felix von Leitner Previous maintainer of Vim Mailing Lists
- David Leonard Port of Python extensions to Unix
- Avner Lottem Edit in right-to-left windows
- Flemming Madsen X11 client-server, various features and patches
- Tony Mechelynck answers many user questions
- Paul Moore Python interface extensions, many patches
- Katsuhito Nagano Work on multibyte versions
- Sung-Hyun Nam Work on multibyte versions
- Vince Negri Win32 GUI and generic console enhancements
- Steve Oualline Author of the first Vim book |frombook|
- Dominique Pelle Valgrind reports and many fixes
- A.Politz Many bug reports and some fixes
- George V. Reilly Win32 port, Win32 GUI start-off
- Stephen Riehm bug collector
- Stefan Roemer various patches and help to users
- Ralf Schandl IBM OS/390 port
- Olaf Seibert DICE and BeBox version, regexp improvements
- Mortaza Shiran Farsi patches
- Peter da Silva termlib
- Paul Slootman OS/2 port
- Henry Spencer regular expressions
- Dany St-Amant Macintosh port
- Tim Thompson Stevie
- G. R. (Fred) Walter Stevie
- Sven Verdoolaege Perl interface
- Robert Webb Command-line completion, GUI versions, and
- lots of patches
- Ingo Wilken Tcl interface
- Mike Williams PostScript printing
- Juergen Weigert Lattice version, AUX improvements, UNIX and
- MS-DOS ports, autoconf
- Stefan 'Sec' Zehl Maintainer of vim.org
- Yasuhiro Matsumoto many MS-Windows improvements
- Ken Takata fixes and features
- Kazunobu Kuriyama GTK 3
- Christian Brabandt many fixes, features, user support, etc.
- Yegappan Lakshmanan many quickfix features
- I wish to thank all the people that sent me bug reports and suggestions. The
- list is too long to mention them all here. Vim would not be the same without
- the ideas from all these people: They keep Vim alive!
- *love* *peace* *friendship* *gross-national-happiness*
- In this documentation there are several references to other versions of Vi:
- *Vi* *vi*
- Vi "the original". Without further remarks this is the version
- of Vi that appeared in Sun OS 4.x. ":version" returns
- "Version 3.7, 6/7/85". Sometimes other versions are referred
- to. Only runs under Unix. Source code is now available under a
- BSD-style license. More information on Vi can be found through:
- http://ex-vi.sourceforge.net/
- *Posix*
- Posix From the IEEE standard 1003.2, Part 2: Shell and utilities.
- Generally known as "Posix". This is a textual description of
- how Vi is supposed to work.
- See |posix-compliance|.
- *Nvi*
- Nvi The "New" Vi. The version of Vi that comes with BSD 4.4 and FreeBSD.
- Very good compatibility with the original Vi, with a few extensions.
- The version used is 1.79. ":version" returns "Version 1.79
- (10/23/96)". There has been no release the last few years, although
- there is a development version 1.81.
- Source code is freely available.
- *Elvis*
- Elvis Another Vi clone, made by Steve Kirkendall. Very compact but isn't
- as flexible as Vim. Development has stalled, Elvis has left the
- building! Source code is freely available.
- *Neovim*
- Neovim A Vim clone. Forked the Vim source in 2014 and went a different way.
- Very much bound to github and has many more dependencies, making
- development more complex and limiting portability. Code has been
- refactored, resulting in patches not being exchangeable with Vim.
- Supports a remote GUI and integration with scripting languages.
- ==============================================================================
- 4. Notation *notation*
- When syntax highlighting is used to read this, text that is not typed
- literally is often highlighted with the Special group. These are items in [],
- {} and <>, and CTRL-X.
- Note that Vim uses all possible characters in commands. Sometimes the [], {}
- and <> are part of what you type, the context should make this clear.
- [] Characters in square brackets are optional.
- *count* *[count]*
- [count] An optional number that may precede the command to multiply
- or iterate the command. If no number is given, a count of one
- is used, unless otherwise noted. Note that in this manual the
- [count] is not mentioned in the description of the command,
- but only in the explanation. This was done to make the
- commands easier to look up. If the 'showcmd' option is on,
- the (partially) entered count is shown at the bottom of the
- window. You can use <Del> to erase the last digit (|N<Del>|).
- *[quotex]*
- ["x] An optional register designation where text can be stored.
- See |registers|. The x is a single character between 'a' and
- 'z' or 'A' and 'Z' or '"', and in some cases (with the put
- command) between '0' and '9', '%', '#', or others. The
- uppercase and lowercase letter designate the same register,
- but the lowercase letter is used to overwrite the previous
- register contents, while the uppercase letter is used to
- append to the previous register contents. Without the ""x" or
- with """" the stored text is put into the unnamed register.
- *{}*
- {} Curly braces denote parts of the command which must appear,
- but which can take a number of different values. The
- differences between Vim and Vi are also given in curly braces
- (this will be clear from the context).
- *{char1-char2}*
- {char1-char2} A single character from the range char1 to char2. For
- example: {a-z} is a lowercase letter. Multiple ranges may be
- concatenated. For example, {a-zA-Z0-9} is any alphanumeric
- character.
- *{motion}* *movement*
- {motion} A command that moves the cursor. These are explained in
- |motion.txt|. Examples:
- w to start of next word
- b to begin of current word
- 4j four lines down
- /The<CR> to next occurrence of "The"
- This is used after an |operator| command to move over the text
- that is to be operated upon.
- - If the motion includes a count and the operator also has a
- count, the two counts are multiplied. For example: "2d3w"
- deletes six words.
- - The motion can be backwards, e.g. "db" to delete to the
- start of the word.
- - The motion can also be a mouse click. The mouse is not
- supported in every terminal though.
- - The ":omap" command can be used to map characters while an
- operator is pending.
- - Ex commands can be used to move the cursor. This can be
- used to call a function that does some complicated motion.
- The motion is always characterwise exclusive, no matter
- what ":" command is used. This means it's impossible to
- include the last character of a line without the line break
- (unless 'virtualedit' is set).
- If the Ex command changes the text before where the operator
- starts or jumps to another buffer the result is
- unpredictable. It is possible to change the text further
- down. Jumping to another buffer is possible if the current
- buffer is not unloaded.
- *{Visual}*
- {Visual} A selected text area. It is started with the "v", "V", or
- CTRL-V command, then any cursor movement command can be used
- to change the end of the selected text.
- This is used before an |operator| command to highlight the
- text that is to be operated upon.
- See |Visual-mode|.
- *<character>*
- <character> A special character from the table below, optionally with
- modifiers, or a single ASCII character with modifiers.
- *'character'*
- 'c' A single ASCII character.
- *CTRL-{char}*
- CTRL-{char} {char} typed as a control character; that is, typing {char}
- while holding the CTRL key down. The case of {char} does not
- matter; thus CTRL-A and CTRL-a are equivalent. But on some
- terminals, using the SHIFT key will produce another code,
- don't use it then.
- *'option'*
- 'option' An option, or parameter, that can be set to a value, is
- enclosed in single quotes. See |options|.
- *quotecommandquote*
- "command" A reference to a command that you can type is enclosed in
- double quotes.
- `command` New style command, this distinguishes it from other quoted
- text and strings.
- *key-notation* *key-codes* *keycodes*
- These names for keys are used in the documentation. They can also be used
- with the ":map" command (insert the key name by pressing CTRL-K and then the
- key you want the name for).
- notation meaning equivalent decimal value(s) ~
- -----------------------------------------------------------------------
- <Nul> zero CTRL-@ 0 (stored as 10) *<Nul>*
- <BS> backspace CTRL-H 8 *backspace*
- <Tab> tab CTRL-I 9 *tab* *Tab*
- *linefeed*
- <NL> linefeed CTRL-J 10 (used for <Nul>)
- <CR> carriage return CTRL-M 13 *carriage-return*
- <Return> same as <CR> *<Return>*
- <Enter> same as <CR> *<Enter>*
- <Esc> escape CTRL-[ 27 *escape* *<Esc>*
- <Space> space 32 *space*
- <lt> less-than < 60 *<lt>*
- <Bslash> backslash \ 92 *backslash* *<Bslash>*
- <Bar> vertical bar | 124 *<Bar>*
- <Del> delete 127
- <CSI> command sequence intro ALT-Esc 155 *<CSI>*
- <xCSI> CSI when typed in the GUI *<xCSI>*
- <EOL> end-of-line (can be <CR>, <NL> or <CR><NL>,
- depends on system and 'fileformat') *<EOL>*
- <Up> cursor-up *cursor-up* *cursor_up*
- <Down> cursor-down *cursor-down* *cursor_down*
- <Left> cursor-left *cursor-left* *cursor_left*
- <Right> cursor-right *cursor-right* *cursor_right*
- <S-Up> shift-cursor-up
- <S-Down> shift-cursor-down
- <S-Left> shift-cursor-left
- <S-Right> shift-cursor-right
- <C-Left> control-cursor-left
- <C-Right> control-cursor-right
- <F1> - <F12> function keys 1 to 12 *function_key* *function-key*
- <S-F1> - <S-F12> shift-function keys 1 to 12 *<S-F1>*
- <Help> help key
- <Undo> undo key
- <Insert> insert key
- <Home> home *home*
- <End> end *end*
- <PageUp> page-up *page_up* *page-up*
- <PageDown> page-down *page_down* *page-down*
- <kHome> keypad home (upper left) *keypad-home*
- <kEnd> keypad end (lower left) *keypad-end*
- <kPageUp> keypad page-up (upper right) *keypad-page-up*
- <kPageDown> keypad page-down (lower right) *keypad-page-down*
- <kPlus> keypad + *keypad-plus*
- <kMinus> keypad - *keypad-minus*
- <kMultiply> keypad * *keypad-multiply*
- <kDivide> keypad / *keypad-divide*
- <kEnter> keypad Enter *keypad-enter*
- <kPoint> keypad Decimal point *keypad-point*
- <k0> - <k9> keypad 0 to 9 *keypad-0* *keypad-9*
- <S-...> shift-key *shift* *<S-*
- <C-...> control-key *control* *ctrl* *<C-*
- <M-...> alt-key or meta-key *meta* *alt* *<M-*
- <A-...> same as <M-...> *<A-*
- <D-...> command-key (Macintosh only) *<D-*
- <t_xx> key with "xx" entry in termcap
- -----------------------------------------------------------------------
- Note: The shifted cursor keys, the help key, and the undo key are only
- available on a few terminals. On the Amiga, shifted function key 10 produces
- a code (CSI) that is also used by key sequences. It will be recognized only
- after typing another key.
- Note: There are two codes for the delete key. 127 is the decimal ASCII value
- for the delete key, which is always recognized. Some delete keys send another
- value, in which case this value is obtained from the termcap entry "kD". Both
- values have the same effect. Also see |:fixdel|.
- Note: The keypad keys are used in the same way as the corresponding "normal"
- keys. For example, <kHome> has the same effect as <Home>. If a keypad key
- sends the same raw key code as its non-keypad equivalent, it will be
- recognized as the non-keypad code. For example, when <kHome> sends the same
- code as <Home>, when pressing <kHome> Vim will think <Home> was pressed.
- Mapping <kHome> will not work then.
- *<>*
- Examples are often given in the <> notation. Sometimes this is just to make
- clear what you need to type, but often it can be typed literally, e.g., with
- the ":map" command. The rules are:
- 1. Any printable characters are typed directly, except backslash and '<'
- 2. A backslash is represented with "\\", double backslash, or "<Bslash>".
- 3. A real '<' is represented with "\<" or "<lt>". When there is no
- confusion possible, a '<' can be used directly.
- 4. "<key>" means the special key typed. This is the notation explained in
- the table above. A few examples:
- <Esc> Escape key
- <C-G> CTRL-G
- <Up> cursor up key
- <C-LeftMouse> Control- left mouse click
- <S-F11> Shifted function key 11
- <M-a> Meta- a ('a' with bit 8 set)
- <M-A> Meta- A ('A' with bit 8 set)
- <t_kd> "kd" termcap entry (cursor down key)
- Although you can specify <M-{char}> with {char} being a multibyte
- character, Vim may not be able to know what byte sequence that is and then
- it won't work.
- If you want to use the full <> notation in Vim, you have to make sure the '<'
- flag is excluded from 'cpoptions' (when 'compatible' is not set, it already is
- by default). >
- :set cpo-=<
- The <> notation uses <lt> to escape the special meaning of key names. Using a
- backslash also works, but only when 'cpoptions' does not include the 'B' flag.
- Examples for mapping CTRL-H to the six characters "<Home>": >
- :imap <C-H> \<Home>
- :imap <C-H> <lt>Home>
- The first one only works when the 'B' flag is not in 'cpoptions'. The second
- one always works.
- To get a literal "<lt>" in a mapping: >
- :map <C-L> <lt>lt>
- For mapping, abbreviation and menu commands you can then copy-paste the
- examples and use them directly. Or type them literally, including the '<' and
- '>' characters. This does NOT work for other commands, like ":set" and
- ":autocmd"!
- The notation can be used in a double quoted strings, using "\<" at the start,
- e.g. "\<C-Space>". This results in a special key code. To convert this back
- to readable text use `keytrans()`.
- ==============================================================================
- 5. Modes, introduction *vim-modes-intro* *vim-modes*
- Vim has seven BASIC modes:
- *Normal* *Normal-mode* *command-mode*
- Normal mode In Normal mode you can enter all the normal editor
- commands. If you start the editor you are in this
- mode (unless you have set the 'insertmode' option,
- see below). This is also known as command mode.
- Visual mode This is like Normal mode, but the movement commands
- extend a highlighted area. When a non-movement
- command is used, it is executed for the highlighted
- area. See |Visual-mode|.
- If the 'showmode' option is on "-- VISUAL --" is shown
- at the bottom of the window.
- Select mode This looks most like the MS-Windows selection mode.
- Typing a printable character deletes the selection
- and starts Insert mode. See |Select-mode|.
- If the 'showmode' option is on "-- SELECT --" is shown
- at the bottom of the window.
- Insert mode In Insert mode the text you type is inserted into the
- buffer. See |Insert-mode|.
- If the 'showmode' option is on "-- INSERT --" is shown
- at the bottom of the window.
- Command-line mode In Command-line mode (also called Cmdline mode) you
- Cmdline mode can enter one line of text at the bottom of the
- window. This is for the Ex commands, ":", the pattern
- search commands, "?" and "/", and the filter command,
- "!". |Cmdline-mode|
- Ex mode Like Command-line mode, but after entering a command
- you remain in Ex mode. Very limited editing of the
- command line. |Ex-mode|
- Terminal-Job mode Interacting with a job in a terminal window. Typed
- keys go to the job and the job output is displayed in
- the terminal window. See |terminal| about how to
- switch to other modes.
- There are seven ADDITIONAL modes. These are variants of the BASIC modes:
- *Operator-pending* *Operator-pending-mode*
- Operator-pending mode This is like Normal mode, but after an operator
- command has started, and Vim is waiting for a {motion}
- to specify the text that the operator will work on.
- Replace mode Replace mode is a special case of Insert mode. You
- can do the same things as in Insert mode, but for
- each character you enter, one character of the existing
- text is deleted. See |Replace-mode|.
- If the 'showmode' option is on "-- REPLACE --" is
- shown at the bottom of the window.
- Virtual Replace mode Virtual Replace mode is similar to Replace mode, but
- instead of file characters you are replacing screen
- real estate. See |Virtual-Replace-mode|.
- If the 'showmode' option is on "-- VREPLACE --" is
- shown at the bottom of the window.
- Insert Normal mode Entered when CTRL-O is typed in Insert mode (see
- |i_CTRL-O|). This is like Normal mode, but after
- executing one command Vim returns to Insert mode.
- If the 'showmode' option is on "-- (insert) --" is
- shown at the bottom of the window.
- Terminal-Normal mode Using Normal mode in a terminal window. Making
- changes is impossible. Use an insert command, such as
- "a" or "i", to return to Terminal-Job mode.
- Insert Visual mode Entered when starting a Visual selection from Insert
- mode, e.g., by using CTRL-O and then "v", "V" or
- CTRL-V. When the Visual selection ends, Vim returns
- to Insert mode.
- If the 'showmode' option is on "-- (insert) VISUAL --"
- is shown at the bottom of the window.
- Insert Select mode Entered when starting Select mode from Insert mode.
- E.g., by dragging the mouse or <S-Right>.
- When the Select mode ends, Vim returns to Insert mode.
- If the 'showmode' option is on "-- (insert) SELECT --"
- is shown at the bottom of the window.
- ==============================================================================
- 6. Switching from mode to mode *mode-switching*
- If for any reason you do not know which mode you are in, you can always get
- back to Normal mode by typing <Esc> twice. This doesn't work for Ex mode
- though, use ":visual".
- You will know you are back in Normal mode when you see the screen flash or
- hear the bell after you type <Esc>. However, when pressing <Esc> after using
- CTRL-O in Insert mode you get a beep but you are still in Insert mode, type
- <Esc> again.
- *i_esc*
- TO mode ~
- Normal Visual Select Insert Replace Cmd-line Ex ~
- FROM mode ~
- Normal v V ^V *4 *1 R gR : / ? ! Q
- Visual *2 ^G c C -- : --
- Select *5 ^O ^G *6 -- -- --
- Insert <Esc> -- -- <Insert> -- --
- Replace <Esc> -- -- <Insert> -- --
- Command-line *3 -- -- :start -- --
- Ex :vi -- -- -- -- --
- -- not possible
- *1 Go from Normal mode to Insert mode by giving the command "i", "I", "a",
- "A", "o", "O", "c", "C", "s" or S".
- *2 Go from Visual mode to Normal mode by giving a non-movement command, which
- causes the command to be executed, or by hitting <Esc> "v", "V" or "CTRL-V"
- (see |v_v|), which just stops Visual mode without side effects.
- *3 Go from Command-line mode to Normal mode by:
- - Hitting <CR> or <NL>, which causes the entered command to be executed.
- - Deleting the complete line (e.g., with CTRL-U) and giving a final <BS>.
- - Hitting CTRL-C or <Esc>, which quits the command-line without executing
- the command.
- In the last case <Esc> may be the character defined with the 'wildchar'
- option, in which case it will start command-line completion. You can
- ignore that and type <Esc> again.
- *4 Go from Normal to Select mode by:
- - use the mouse to select text while 'selectmode' contains "mouse"
- - use a non-printable command to move the cursor while keeping the Shift
- key pressed, and the 'selectmode' option contains "key"
- - use "v", "V" or "CTRL-V" while 'selectmode' contains "cmd"
- - use "gh", "gH" or "g CTRL-H" |g_CTRL-H|
- *5 Go from Select mode to Normal mode by using a non-printable command to move
- the cursor, without keeping the Shift key pressed.
- *6 Go from Select mode to Insert mode by typing a printable character. The
- selection is deleted and the character is inserted.
- If the 'insertmode' option is on, editing a file will start in Insert mode.
- *CTRL-\_CTRL-N* *i_CTRL-\_CTRL-N* *c_CTRL-\_CTRL-N* *v_CTRL-\_CTRL-N*
- Additionally the command CTRL-\ CTRL-N or <C-\><C-N> can be used to go to
- Normal mode from any other mode. This can be used to make sure Vim is in
- Normal mode, without causing a beep like <Esc> would. However, this does not
- work in Ex mode. When used after a command that takes an argument, such as
- |f| or |m|, the timeout set with 'ttimeoutlen' applies.
- When focus is in a terminal window, CTRL-\ CTRL-N goes to Normal mode until an
- edit command is entered, see |t_CTRL-\_CTRL-N|.
- *CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G*
- The command CTRL-\ CTRL-G or <C-\><C-G> can be used to go to Insert mode when
- 'insertmode' is set. Otherwise it goes to Normal mode. This can be used to
- make sure Vim is in the mode indicated by 'insertmode', without knowing in
- what mode Vim currently is.
- *Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
- Q Switch to "Ex" mode. This is a bit like typing ":"
- commands one after another, except:
- - You don't have to keep pressing ":".
- - The screen doesn't get updated after each command.
- - There is no normal command-line editing.
- - Mappings and abbreviations are not used.
- In fact, you are editing the lines with the "standard"
- line-input editing commands (<Del> or <BS> to erase,
- CTRL-U to kill the whole line).
- Vim will enter this mode by default if it's invoked as
- "ex" on the command-line or the |-e| command line
- argument was used.
- Use the ":vi" command |:visual| to exit "Ex" mode.
- Note: In older versions of Vim "Q" formatted text,
- that is now done with |gq|. But if you use the
- |vimrc_example.vim| script or |defaults.vim|, "Q"
- works like "gq". Except for Select mode.
- *gQ*
- gQ Switch to "Ex" mode like with "Q", but really behave
- like typing ":" commands after another. All command
- line editing, completion etc. is available.
- Use the `:vi` command (`:visual`) to exit "Ex" mode.
- ==============================================================================
- 7. The window contents *window-contents*
- In Normal mode and Insert/Replace mode the screen window will show the current
- contents of the buffer: What You See Is What You Get. There are two
- exceptions:
- - When the 'cpoptions' option contains '$', and the change is within one line,
- the text is not directly deleted, but a '$' is put at the last deleted
- character.
- - When inserting text in one window, other windows on the same text are not
- updated until the insert is finished.
- Lines longer than the window width will wrap, unless the 'wrap' option is off
- (see below). The 'linebreak' option can be set to wrap at a blank character.
- If the window has room after the last line of the buffer, Vim will show '~' in
- the first column of the last lines in the window, like this:
- +-----------------------+
- |some line |
- |last line |
- |~ |
- |~ |
- +-----------------------+
- Thus the '~' lines indicate that the end of the buffer was reached.
- If the last line in a window doesn't fit, Vim will indicate this with a '@' in
- the first column of the last lines in the window, like this:
- +-----------------------+
- |first line |
- |second line |
- |@ |
- |@ |
- +-----------------------+
- Thus the '@' lines indicate that there is a line that doesn't fit in the
- window.
- When the "lastline" flag is present in the 'display' option, you will not see
- '@' characters at the left side of window. If the last line doesn't fit
- completely, only the part that fits is shown, and the last three characters of
- the last line are replaced with "@@@", like this:
- +-----------------------+
- |first line |
- |second line |
- |a very long line that d|
- |oesn't fit in the wi@@@|
- +-----------------------+
- If there is a single line that is too long to fit in the window, this is a
- special situation. Vim will show only part of the line, around where the
- cursor is. There are no special characters shown, so that you can edit all
- parts of this line.
- The '@' occasion in the 'highlight' option can be used to set special
- highlighting for the '@' and '~' characters. This makes it possible to
- distinguish them from real characters in the buffer.
- The 'showbreak' option contains the string to put in front of wrapped lines.
- *wrap-off*
- If the 'wrap' option is off, long lines will not wrap. Only the part that
- fits on the screen is shown. If the cursor is moved to a part of the line
- that is not shown, the screen is scrolled horizontally. The advantage of
- this method is that columns are shown as they are and lines that cannot fit
- on the screen can be edited. The disadvantage is that you cannot see all the
- characters of a line at once. The 'sidescroll' option can be set to the
- minimal number of columns to scroll.
- All normal ASCII characters are displayed directly on the screen. The <Tab>
- is replaced with the number of spaces that it represents. Other non-printing
- characters are replaced with "^{char}", where {char} is the non-printing
- character with 64 added. Thus character 7 (bell) will be shown as "^G".
- Characters between 127 and 160 are replaced with "~{char}", where {char} is
- the character with 64 subtracted. These characters occupy more than one
- position on the screen. The cursor can only be positioned on the first one.
- If you set the 'number' option, all lines will be preceded with their
- number. Tip: If you don't like wrapping lines to mix with the line numbers,
- set the 'showbreak' option to eight spaces:
- ":set showbreak=\ \ \ \ \ \ \ \ "
- If you set the 'list' option, <Tab> characters will not be shown as several
- spaces, but as "^I". A '$' will be placed at the end of the line, so you can
- find trailing blanks.
- In Command-line mode only the command-line itself is shown correctly. The
- display of the buffer contents is updated as soon as you go back to Command
- mode.
- The last line of the window is used for status and other messages. The
- status messages will only be used if an option is on:
- status message option default Unix default ~
- current mode 'showmode' on on
- command characters 'showcmd' on off
- cursor position 'ruler' off off
- The current mode is "-- INSERT --" or "-- REPLACE --", see |'showmode'|. The
- command characters are those that you typed but were not used yet.
- If you have a slow terminal you can switch off the status messages to speed
- up editing:
- :set nosc noru nosm
- If there is an error, an error message will be shown for at least one second
- (in reverse video).
- Some commands show how many lines were affected. Above which threshold this
- happens can be controlled with the 'report' option (default 2).
- On the Amiga Vim will run in a CLI window. The name Vim and the full name of
- the current file name will be shown in the title bar. When the window is
- resized, Vim will automatically redraw the window. You may make the window as
- small as you like, but if it gets too small not a single line will fit in it.
- Make it at least 40 characters wide to be able to read most messages on the
- last line.
- On most Unix systems, resizing the window is recognized and handled correctly
- by Vim.
- ==============================================================================
- 8. Definitions *definitions*
- buffer Contains lines of text, usually read from a file.
- screen The whole area that Vim uses to work in. This can be
- a terminal emulator window. Also called "the Vim
- window".
- window A view on a buffer. There can be multiple windows for
- one buffer.
- A screen contains one or more windows, separated by status lines and with the
- command line at the bottom.
- +-------------------------------+
- screen | window 1 | window 2 |
- | | |
- | | |
- |= status line =|= status line =|
- | window 3 |
- | |
- | |
- |==== status line ==============|
- |command line |
- +-------------------------------+
- The command line is also used for messages. It scrolls up the screen when
- there is not enough room in the command line.
- A difference is made between four types of lines:
- buffer lines The lines in the buffer. This is the same as the
- lines as they are read from/written to a file. They
- can be thousands of characters long.
- logical lines The buffer lines with folding applied. Buffer lines
- in a closed fold are changed to a single logical line:
- "+-- 99 lines folded". They can be thousands of
- characters long.
- window lines The lines displayed in a window: A range of logical
- lines with wrapping, line breaks, etc. applied. They
- can only be as long as the width of the window allows,
- longer lines are wrapped or truncated.
- screen lines The lines of the screen that Vim uses. Consists of
- the window lines of all windows, with status lines
- and the command line added. They can only be as long
- as the width of the screen allows. When the command
- line gets longer it wraps and lines are scrolled to
- make room.
- buffer lines logical lines window lines screen lines ~
- 1. one 1. one 1. +-- folded 1. +-- folded
- 2. two 2. +-- folded 2. five 2. five
- 3. three 3. five 3. six 3. six
- 4. four 4. six 4. seven 4. seven
- 5. five 5. seven 5. === status line ===
- 6. six 6. aaa
- 7. seven 7. bbb
- 8. ccc ccc c
- 1. aaa 1. aaa 1. aaa 9. cc
- 2. bbb 2. bbb 2. bbb 10. ddd
- 3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~
- 4. ddd 4. ddd 4. cc 12. === status line ===
- 5. ddd 13. (command line)
- 6. ~
- ==============================================================================
- vim:tw=78:ts=8:noet:ft=help:norl:
|