diff options
Diffstat (limited to 'runtime/doc/intro.txt')
-rw-r--r-- | runtime/doc/intro.txt | 913 |
1 files changed, 913 insertions, 0 deletions
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt new file mode 100644 index 0000000..185796f --- /dev/null +++ b/runtime/doc/intro.txt @@ -0,0 +1,913 @@ +*intro.txt* For Vim version 9.1. Last change: 2023 Nov 18 + + + 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. The GUI version of Vim is written +"gVim" (or "GVim" when at the beginning of a sentence). + +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. +<vim-security@googlegroups.com> *vim-security* + This list is for (privately) discussing security relevant issues 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, except for the vim-security list. +- 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, please contact any of the current Vim maintainers + https://github.com/orgs/vim/people (but not Bram or the vim-dev ML). + In the future, a proper process for handling security issues will be setup. + +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* + +Most of Vim was created by Bram Moolenaar <Bram@vim.org> |Bram-Moolenaar|. + +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 Let Bram work on Vim one day a week + Loic Grenie xvim (ideas for multi windows version) + Sven Guckes Vim promoter and previous WWW page maintainer + |Sven-Guckes| + 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: |