1*vi_diff.txt* For Vim version 8.2. Last change: 2019 Dec 17 2 3 4 VIM REFERENCE MANUAL by Bram Moolenaar 5 6 7Differences between Vim and Vi *vi-differences* 8 9This file lists the differences between Vim and Vi/Ex and gives an overview of 10what is in Vim that is not in Vi. 11 12Vim is mostly POSIX 1003.2-1 compliant. The only command known to be missing 13is ":open". There are probably a lot of small differences (either because Vim 14is missing something or because Posix is beside the mark). 15 161. Simulated command |simulated-command| 172. Missing options |missing-options| 183. Limits |limits| 194. The most interesting additions |vim-additions| 205. Other vim features |other-features| 216. Supported Vi features |vi-features| 227. Command-line arguments |cmdline-arguments| 238. POSIX compliance |posix-compliance| 24 25============================================================================== 261. Simulated command *simulated-command* 27 28This command is in Vi, but Vim only simulates it: 29 30 *:o* *:op* *:open* 31:[range]o[pen] Works like |:visual|: end Ex mode. 32 {Vi: start editing in open mode} 33 34:[range]o[pen] /pattern/ As above, additionally move the cursor to the 35 column where "pattern" matches in the cursor 36 line. 37 38Vim does not support open mode, since it's not really useful. For those 39situations where ":open" would start open mode Vim will leave Ex mode, which 40allows executing the same commands, but updates the whole screen instead of 41only one line. 42 43============================================================================== 442. Missing options *missing-options* 45 46These options are in the Unix Vi, but not in Vim. If you try to set one of 47them you won't get an error message, but the value is not used and cannot be 48printed. 49 50autoprint (ap) boolean (default on) *'autoprint'* *'ap'* 51beautify (bf) boolean (default off) *'beautify'* *'bf'* 52flash (fl) boolean (default ??) *'flash'* *'fl'* 53graphic (gr) boolean (default off) *'graphic'* *'gr'* 54hardtabs (ht) number (default 8) *'hardtabs'* *'ht'* 55 number of spaces that a <Tab> moves on the display 56mesg boolean (default on) *'mesg'* 57novice boolean (default off) *'novice'* 58open boolean (default on) *'open'* 59optimize (op) boolean (default off) *'optimize'* *'op'* 60redraw boolean (default off) *'redraw'* 61slowopen (slow) boolean (default off) *'slowopen'* *'slow'* 62sourceany boolean (default off) *'sourceany'* 63w300 number (default 23) *'w300'* 64w1200 number (default 23) *'w1200'* 65w9600 number (default 23) *'w9600'* 66 67Vi did not allow for changing the termcap entries, you would have to exit Vi, 68edit the termcap entry and try again. Vim has the |terminal-options|. 69 70============================================================================== 713. Limits *limits* 72 73Vim has only a few limits for the files that can be edited {Vi: can not handle 74<Nul> characters and characters above 128, has limited line length, many other 75limits}. 76 *E340* 77Maximum line length 2147483647 characters. Longer lines are split. 78Maximum number of lines 2147483647 lines. 79Maximum file size 2147483647 bytes (2 Gbyte) when a long integer is 80 32 bits. Much more for 64 bit longs. Also limited 81 by available disk space for the |swap-file|. 82 *E75* 83Length of a file path Unix and Win32: 1024 characters, otherwise 256 84 characters (or as much as the system supports). 85Length of an expanded string option 86 Unix and Win32: 1024 characters, otherwise 256 87 characters 88Maximum display width Unix and Win32: 1024 characters, otherwise 255 89 characters 90Maximum lhs of a mapping 50 characters. 91Number of different highlighting types: over 30000 92Range of a Number variable: -2147483648 to 2147483647 (might be more on 64 93 bit systems) 94Maximum length of a line in a tags file: 512 bytes. 95 96Information for undo and text in registers is kept in memory, thus when making 97(big) changes the amount of (virtual) memory available limits the number of 98undo levels and the text that can be kept in registers. Other things are also 99kept in memory: Command-line history, error messages for Quickfix mode, etc. 100 101Memory usage limits 102------------------- 103 104The option 'maxmem' ('mm') is used to set the maximum memory used for one 105buffer (in kilobytes). 'maxmemtot' is used to set the maximum memory used for 106all buffers (in kilobytes). The defaults depend on the system used. For the 107Amiga, 'maxmemtot' is set depending on the amount of memory available. 108These are not hard limits, but tell Vim when to move text into a swap file. 109If you don't like Vim to swap to a file, set 'maxmem' and 'maxmemtot' to a 110very large value. The swap file will then only be used for recovery. If you 111don't want a swap file at all, set 'updatecount' to 0, or use the "-n" 112argument when starting Vim. 113 114============================================================================== 1154. The most interesting additions *vim-additions* 116 117Vi compatibility. |'compatible'| 118 Although Vim is 99% Vi compatible, some things in Vi can be 119 considered to be a bug, or at least need improvement. But still, Vim 120 starts in a mode which behaves like the "real" Vi as much as possible. 121 To make Vim behave a little bit better, try resetting the 'compatible' 122 option: 123 :set nocompatible 124 Or start Vim with the "-N" argument: 125 vim -N 126 Vim starts with 'nocompatible' automatically if you have a .vimrc 127 file. See |startup|. 128 The 'cpoptions' option can be used to set Vi compatibility on/off for 129 a number of specific items. 130 131Support for different systems. 132 Vim can be used on: 133 - All Unix systems (it works on all systems it was tested on, although 134 the GUI and Perl interface may not work everywhere). 135 - Amiga (500, 1000, 1200, 2000, 3000, 4000, ...). 136 - MS-Windows 137 - VMS 138 - BeOS 139 - Macintosh 140 - IBM OS/390 141 Note that on some systems features need to be disabled to reduce 142 resource usage. For some outdated systems you need to use an older 143 Vim version. 144 145Multi level persistent undo. |undo| 146 'u' goes backward in time, 'CTRL-R' goes forward again. Set option 147 'undolevels' to the number of changes to be remembered (default 1000). 148 Set 'undolevels' to 0 for a Vi-compatible one level undo. Set it to 149 -1 for no undo at all. 150 When all changes in a buffer have been undone, the buffer is not 151 considered changed anymore. You can exit it with :q, without <!>. 152 When undoing a few changes and then making a new change Vim will 153 create a branch in the undo tree. This means you can go back to any 154 state of the text, there is no risk of a change causing text to be 155 lost forever. |undo-tree| 156 The undo information is stored in a file when the 'undofile' option is 157 set. This means you can exit Vim, start Vim on a previously edited 158 file and undo changes that were made before exiting Vim. 159 160Graphical User Interface (GUI). |gui| 161 Included support for GUI: menu's, mouse, scrollbars, etc. You can 162 define your own menus. Better support for CTRL/SHIFT/ALT keys in 163 combination with special keys and mouse. Supported for various 164 platforms, such as X11 (with Motif and Athena interfaces), GTK, Win32 165 (Windows 95 and later), BeOS, Amiga and Macintosh. 166 167Multiple windows and buffers. |windows.txt| 168 Vim can split the screen into several windows, each editing a 169 different buffer or the same buffer at a different location. Buffers 170 can still be loaded (and changed) but not displayed in a window. This 171 is called a hidden buffer. Many commands and options have been added 172 for this facility. 173 Vim can also use multiple tab pages, each with one or more windows. A 174 line with tab labels can be used to quickly switch between these pages. 175 |tab-page| 176 177Terminal window. |:terminal| 178 Vim can create a window in which a terminal emulator runs. This can 179 be used to execute an arbitrary command, a shell or a debugger. 180 181Syntax highlighting. |:syntax| 182 Vim can highlight keywords, patterns and other things. This is 183 defined by a number of |:syntax| commands, and can be made to 184 highlight most languages and file types. A number of files are 185 included for highlighting the most common languages, like C, C++, 186 Java, Pascal, Makefiles, shell scripts, etc. The colors used for 187 highlighting can be defined for ordinary terminals, color terminals 188 and the GUI with the |:highlight| command. A convenient way to do 189 this is using a |:colorscheme| command. 190 The highlighted text can be exported as HTML. |convert-to-HTML| 191 Other items that can be highlighted are matches with the search string 192 |'hlsearch'|, matching parens |matchparen| and the cursor line and 193 column |'cursorline'| |'cursorcolumn'|. 194 195Text properties |textprop.txt| 196 Vim supports highlighting text by a plugin. Property types can be 197 specified with |prop_type_add()| and properties can be placed with 198 |prop_add()|. 199 200Spell checking. |spell| 201 When the 'spell' option is set Vim will highlight spelling mistakes. 202 About 50 languages are currently supported, selected with the 203 'spelllang' option. In source code only comments and strings are 204 checked for spelling. 205 206Folding. |folding| 207 A range of lines can be shown as one "folded" line. This allows 208 overviewing a file and moving blocks of text around quickly. 209 Folds can be created manually, from the syntax of the file, by indent, 210 etc. 211 212Diff mode. |diff| 213 Vim can show two versions of a file with the differences highlighted. 214 Parts of the text that are equal are folded away. Commands can be 215 used to move text from one version to the other. 216 217Plugins. |add-plugin| 218 The functionality can be extended by dropping a plugin file in the 219 right directory. That's an easy way to start using Vim scripts 220 written by others. Plugins can be for all kind of files, or 221 specifically for a filetype. 222 Packages make this even easier. |packages| 223 224Asynchronous communication and timers. |channel| |job| |timer| 225 Vim can exchange messages with other processes in the background. 226 This makes it possible to have servers do work and send back the 227 results to Vim. |channel| 228 Vim can start a job, communicate with it and stop it. |job| 229 Timers can fire once or repeatedly and invoke a function to do any 230 work. |timer| 231 232Repeat a series of commands. |q| 233 "q{c}" starts recording typed characters into named register {c}. 234 A subsequent "q" stops recording. The register can then be executed 235 with the "@{c}" command. This is very useful to repeat a complex 236 action. 237 238Flexible insert mode. |ins-special-special| 239 The arrow keys can be used in insert mode to move around in the file. 240 This breaks the insert in two parts as far as undo and redo is 241 concerned. 242 243 CTRL-O can be used to execute a single Normal mode command. This is 244 almost the same as hitting <Esc>, typing the command and doing |a|. 245 246Visual mode. |Visual-mode| 247 Visual mode can be used to first highlight a piece of text and then 248 give a command to do something with it. This is an (easy to use) 249 alternative to first giving the operator and then moving to the end of 250 the text to be operated upon. 251 |v| and |V| are used to start Visual mode. |v| works on characters 252 and |V| on lines. Move the cursor to extend the Visual area. It is 253 shown highlighted on the screen. By typing "o" the other end of the 254 Visual area can be moved. The Visual area can be affected by an 255 operator: 256 d delete 257 c change 258 y yank 259 > or < insert or delete indent 260 ! filter through external program 261 = filter through indent 262 : start |:| command for the Visual lines. 263 gq format text to 'textwidth' columns 264 J join lines 265 ~ swap case 266 u make lowercase 267 U make uppercase 268 {Vi has no Visual mode, the name "visual" is used for Normal mode, to 269 distinguish it from Ex mode} 270 271Block operators. |visual-block| 272 With Visual mode a rectangular block of text can be selected. Start 273 Visual mode with CTRL-V. The block can be deleted ("d"), yanked ("y") 274 or its case can be changed ("~", "u" and "U"). A deleted or yanked 275 block can be put into the text with the "p" and "P" commands. 276 277Help system. |:help| 278 Help is displayed in a window. The usual commands can be used to 279 move around, search for a string, etc. Tags can be used to jump 280 around in the help files, just like hypertext links. The |:help| 281 command takes an argument to quickly jump to the info on a subject. 282 <F1> is the quick access to the help system. The name of the help 283 index file can be set with the 'helpfile' option. 284 285Command-line editing and history. |cmdline-editing| 286 You can insert or delete at any place in the command-line using the 287 cursor keys. The right/left cursor keys can be used to move 288 forward/backward one character. The shifted right/left cursor keys 289 can be used to move forward/backward one word. CTRL-B/CTRL-E can be 290 used to go to the begin/end of the command-line. 291 {Vi: can only alter the last character in the line} 292 {Vi: when hitting <Esc> the command-line is executed. This is 293 unexpected for most people; therefore it was changed in Vim. But when 294 the <Esc> is part of a mapping, the command-line is executed. If you 295 want the Vi behaviour also when typing <Esc>, use ":cmap ^V<Esc> 296 ^V^M"} 297 |cmdline-history| 298 The command-lines are remembered. The up/down cursor keys can be used 299 to recall previous command-lines. The 'history' option can be set to 300 the number of lines that will be remembered. There is a separate 301 history for commands and for search patterns. 302 303Command-line completion. |cmdline-completion| 304 While entering a command-line (on the bottom line of the screen) 305 <Tab> can be typed to complete 306 what example ~ 307 - command :e<Tab> 308 - tag :ta scr<Tab> 309 - option :set sc<Tab> 310 - option value :set hf=<Tab> 311 - file name :e ve<Tab> 312 - etc. 313 314 If there are multiple matches, CTRL-N (next) and CTRL-P (previous) 315 will walk through the matches. <Tab> works like CTRL-N, but wraps 316 around to the first match. 317 318 The 'wildchar' option can be set to the character for command-line 319 completion, <Tab> is the default. CTRL-D can be typed after an 320 (incomplete) wildcard; all matches will be listed. CTRL-A will insert 321 all matches. CTRL-L will insert the longest common part of the 322 matches. 323 324Insert-mode completion. |ins-completion| 325 In Insert mode the CTRL-N and CTRL-P keys can be used to complete a 326 word that appears elsewhere. |i_CTRL-N| 327 With CTRL-X another mode is entered, through which completion can be 328 done for: 329 |i_CTRL-X_CTRL-F| file names 330 |i_CTRL-X_CTRL-K| words from 'dictionary' files 331 |i_CTRL-X_CTRL-T| words from 'thesaurus' files 332 |i_CTRL-X_CTRL-I| words from included files 333 |i_CTRL-X_CTRL-L| whole lines 334 |i_CTRL-X_CTRL-]| words from the tags file 335 |i_CTRL-X_CTRL-D| definitions or macros 336 |i_CTRL-X_CTRL-O| Omni completion: clever completion 337 specifically for a file type 338 etc. 339 340Long line support. |'wrap'| |'linebreak'| 341 If the 'wrap' option is off, long lines will not wrap and only part 342 of them will be shown. When the cursor is moved to a part that is not 343 shown, the screen will scroll horizontally. The minimum number of 344 columns to scroll can be set with the 'sidescroll' option. The |zh| 345 and |zl| commands can be used to scroll sideways. 346 Alternatively, long lines are broken in between words when the 347 'linebreak' option is set. This allows editing a single-line 348 paragraph conveniently (e.g. when the text is later read into a DTP 349 program). Move the cursor up/down with the |gk| and |gj| commands. 350 351Text formatting. |formatting| 352 The 'textwidth' option can be used to automatically limit the line 353 length. This supplements the 'wrapmargin' option of Vi, which was not 354 very useful. The |gq| operator can be used to format a piece of text 355 (for example, |gqap| formats the current paragraph). Commands for 356 text alignment: |:center|, |:left| and |:right|. 357 358Extended search patterns. |pattern| 359 There are many extra items to match various text items. Examples: 360 A "\n" can be used in a search pattern to match a line break. 361 "x\{2,4}" matches "x" 2 to 4 times. 362 "\s" matches a white space character. 363 364Directory, remote and archive browsing. |netrw| 365 Vim can browse the file system. Simply edit a directory. Move around 366 in the list with the usual commands and press <Enter> to go to the 367 directory or file under the cursor. 368 This also works for remote files over ftp, http, ssh, etc. 369 Zip and tar archives can also be browsed. |tar| |zip| 370 371Edit-compile-edit speedup. |quickfix| 372 The |:make| command can be used to run the compilation and jump to the 373 first error. A file with compiler error messages is interpreted. Vim 374 jumps to the first error. 375 376 Each line in the error file is scanned for the name of a file, line 377 number and error message. The 'errorformat' option can be set to a 378 list of scanf-like strings to handle output from many compilers. 379 380 The |:cn| command can be used to jump to the next error. 381 |:cl| lists all the error messages. Other commands are available. 382 The 'makeef' option has the name of the file with error messages. 383 The 'makeprg' option contains the name of the program to be executed 384 with the |:make| command. 385 The 'shellpipe' option contains the string to be used to put the 386 output of the compiler into the errorfile. 387 388Finding matches in files. |:vimgrep| 389 Vim can search for a pattern in multiple files. This uses the 390 advanced Vim regexp pattern, works on all systems and also works to 391 search in compressed files. 392 393Improved indenting for programs. |'cindent'| 394 When the 'cindent' option is on the indent of each line is 395 automatically adjusted. C syntax is mostly recognized. The indent 396 for various styles can be set with 'cinoptions'. The keys to trigger 397 indenting can be set with 'cinkeys'. 398 399 Comments can be automatically formatted. The 'comments' option can be 400 set to the characters that start and end a comment. This works best 401 for C code, but also works for e-mail (">" at start of the line) and 402 other types of text. The |=| operator can be used to re-indent 403 lines. 404 405 For many other languages an indent plugin is present to support 406 automatic indenting. |30.3| 407 408Searching for words in included files. |include-search| 409 The |[i| command can be used to search for a match of the word under 410 the cursor in the current and included files. The 'include' option 411 can be set to a pattern that describes a command to include a file 412 (the default is for C programs). 413 The |[I| command lists all matches, the |[_CTRL-I| command jumps to 414 a match. 415 The |[d|, |[D| and |[_CTRL-D| commands do the same, but only for 416 lines where the pattern given with the 'define' option matches. 417 418Automatic commands. |autocommand| 419 Commands can be automatically executed when reading a file, writing a 420 file, jumping to another buffer, etc., depending on the file name. 421 This is useful to set options and mappings for C programs, 422 documentation, plain text, e-mail, etc. This also makes it possible 423 to edit compressed files. 424 425Scripts and Expressions. |expression| 426 Commands have been added to form up a powerful script language. 427 |:if| Conditional execution, which can be used for example 428 to set options depending on the value of $TERM. 429 |:while| Repeat a number of commands. 430 |:for| Loop over a list. 431 |:echo| Print the result of an expression. 432 |:let| Assign a value to an internal variable, option, etc. 433 Variable types are Number, String, List and Dictionary. 434 |:execute| Execute a command formed by an expression. 435 |:try| Catch exceptions. 436 etc., etc. See |eval|. 437 Debugging and profiling are supported. |debug-scripts| |profile| 438 If this is not enough, an interface is provided to |Python|, |Ruby|, 439 |Tcl|, |Lua|, |Perl| and |MzScheme|. 440 441Viminfo. |viminfo-file| 442 The command-line history, marks and registers can be stored in a file 443 that is read on startup. This can be used to repeat a search command 444 or command-line command after exiting and restarting Vim. It is also 445 possible to jump right back to where the last edit stopped with |'0|. 446 The 'viminfo' option can be set to select which items to store in the 447 .viminfo file. This is off by default. 448 449Printing. |printing| 450 The |:hardcopy| command sends text to the printer. This can include 451 syntax highlighting. 452 453Mouse support. |mouse-using| 454 The mouse is supported in the GUI version, in an xterm for Unix, for 455 BSDs with sysmouse, for Linux with gpm, and Win32. It can be used to 456 position the cursor, select the visual area, paste a register, etc. 457 458Usage of key names. |<>| |key-notation| 459 Special keys now all have a name like <Up>, <End>, etc. 460 This name can be used in mappings, to make it easy to edit them. 461 462Editing binary files. |edit-binary| 463 Vim can edit binary files. You can change a few characters in an 464 executable file, without corrupting it. Vim doesn't remove NUL 465 characters (they are represented as <NL> internally). 466 |-b| command-line argument to start editing a binary file 467 |'binary'| Option set by |-b|. Prevents adding an <EOL> for the 468 last line in the file. 469 470Multi-language support. |multi-lang| 471 Files in double-byte or multi-byte encodings can be edited. There is 472 UTF-8 support to be able to edit various languages at the same time, 473 without switching fonts. |UTF-8| 474 Messages and menus are available in different languages. 475 476Move cursor beyond lines. 477 When the 'virtualedit' option is set the cursor can move all over the 478 screen, also where there is no text. This is useful to edit tables 479 and figures easily. 480 481============================================================================== 4825. Other vim features *other-features* 483 484A random collection of nice extra features. 485 486 487When Vim is started with "-s scriptfile", the characters read from 488"scriptfile" are treated as if you typed them. If end of file is reached 489before the editor exits, further characters are read from the console. 490 491The "-w" option can be used to record all typed characters in a script file. 492This file can then be used to redo the editing, possibly on another file or 493after changing some commands in the script file. 494 495The "-o" option opens a window for each argument. "-o4" opens four windows. 496 497Vi requires several termcap entries to be able to work full-screen. Vim only 498requires the "cm" entry (cursor motion). 499 500 501In command mode: 502 503When the 'showcmd' option is set, the command characters are shown in the last 504line of the screen. They are removed when the command is finished. 505 506If the 'ruler' option is set, the current cursor position is shown in the 507last line of the screen. 508 509"U" still works after having moved off the last changed line and after "u". 510 511Characters with the 8th bit set are displayed. The characters between '~' and 5120xa0 are displayed as "~?", "~@", "~A", etc., unless they are included in the 513'isprint' option. 514 515"][" goes to the next ending of a C function ('}' in column 1). 516"[]" goes to the previous ending of a C function ('}' in column 1). 517 518"]f", "[f" and "gf" start editing the file whose name is under the cursor. 519CTRL-W f splits the window and starts editing the file whose name is under 520the cursor. 521 522"*" searches forward for the identifier under the cursor, "#" backward. 523"K" runs the program defined by the 'keywordprg' option, with the identifier 524under the cursor as argument. 525 526"%" can be preceded with a count. The cursor jumps to the line that 527percentage down in the file. The normal "%" function to jump to the matching 528brace skips braces inside quotes. 529 530With the CTRL-] command, the cursor may be in the middle of the identifier. 531 532The used tags are remembered. Commands that can be used with the tag stack 533are CTRL-T, ":pop" and ":tag". ":tags" lists the tag stack. 534 535Vi uses 'wrapscan' when searching for a tag. When jumping to a tag Vi starts 536searching in line 2 of another file. It does not find a tag in line 1 of 537another file when 'wrapscan' is not set. 538 539The 'tags' option can be set to a list of tag file names. Thus multiple 540tag files can be used. For file names that start with "./", the "./" is 541replaced with the path of the current file. This makes it possible to use a 542tags file in the same directory as the file being edited. 543{Vi: always uses binary search in some versions} 544{Vi does not have the security prevention for commands in tag files} 545 546Previously used file names are remembered in the alternate file name list. 547CTRL-^ accepts a count, which is an index in this list. 548":files" command shows the list of alternate file names. 549"#<N>" is replaced with the <N>th alternate file name in the list. 550"#<" is replaced with the current file name without extension. 551 552Search patterns have more features. The <NL> character is seen as part of the 553search pattern and the substitute string of ":s". Vi sees it as the end of 554the command. 555 556Searches can put the cursor on the end of a match and may include a character 557offset. 558 559Count added to "~", ":next", ":Next", "n" and "N". 560 561The command ":next!" with 'autowrite' set does not write the file. In vi the 562file was written, but this is considered to be a bug, because one does not 563expect it and the file is not written with ":rewind!". 564 565In Vi when entering a <CR> in replace mode deletes a character only when 'ai' 566is set (but does not show it until you hit <Esc>). Vim always deletes a 567character (and shows it immediately). 568 569Added :wnext command. Same as ":write" followed by ":next". 570 571The ":w!" command always writes, also when the file is write protected. In Vi 572you would have to do ":!chmod +w %:S" and ":set noro". 573 574When 'tildeop' has been set, "~" is an operator (must be followed by a 575movement command). 576 577With the "J" (join) command you can reset the 'joinspaces' option to have only 578one space after a period (Vi inserts two spaces). 579 580"cw" can be used to change white space formed by several characters (Vi is 581confusing: "cw" only changes one space, while "dw" deletes all white space). 582{Vi: "cw" when on a blank followed by other blanks changes only the first 583blank; this is probably a bug, because "dw" deletes all the blanks} 584 585"o" and "O" accept a count for repeating the insert (Vi clears a part of 586display). 587 588Flags after Ex commands not supported (no plans to include it). 589 590On non-UNIX systems ":cd" command shows current directory instead of going to 591the home directory (there isn't one). ":pwd" prints the current directory on 592all systems. 593 594After a ":cd" command the file names (in the argument list, opened files) 595still point to the same files. In Vi ":cd" is not allowed in a changed file; 596otherwise the meaning of file names change. 597 598":source!" command reads Vi commands from a file. 599 600":mkexrc" command writes current modified options and mappings to a ".exrc" 601file. ":mkvimrc" writes to a ".vimrc" file. 602 603No check for "tail recursion" with mappings. This allows things like 604":map! foo ^]foo". 605 606When a mapping starts with number, vi loses the count typed before it (e.g. 607when using the mapping ":map g 4G" the command "7g" goes to line 4). This is 608considered a vi bug. Vim concatenates the counts (in the example it becomes 609"74G"), as most people would expect. 610 611The :put! command inserts the contents of a register above the current line. 612 613The "p" and "P" commands of vi cannot be repeated with "." when the putted 614text is less than a line. In Vim they can always be repeated. 615 616":noremap" command can be used to enter a mapping that will not be remapped. 617This is useful to exchange the meaning of two keys. ":cmap", ":cunmap" and 618":cnoremap" can be used for mapping in command-line editing only. ":imap", 619":iunmap" and ":inoremap" can be used for mapping in insert mode only. 620Similar commands exist for abbreviations: ":noreabbrev", ":iabbrev" 621":cabbrev", ":iunabbrev", ":cunabbrev", ":inoreabbrev", ":cnoreabbrev". 622 623In Vi the command ":map foo bar" would remove a previous mapping 624":map bug foo". This is considered a bug, so it is not included in Vim. 625":unmap! foo" does remove ":map! bug foo", because unmapping would be very 626difficult otherwise (this is vi compatible). 627 628The ':' register contains the last command-line. 629The '%' register contains the current file name. 630The '.' register contains the last inserted text. 631 632":dis" command shows the contents of the yank registers. 633 634CTRL-O/CTRL-I can be used to jump to older/newer positions. These are the 635same positions as used with the '' command, but may be in another file. The 636":jumps" command lists the older positions. 637 638If the 'shiftround' option is set, an indent is rounded to a multiple of 639'shiftwidth' with ">" and "<" commands. 640 641The 'scrolljump' option can be set to the minimum number of lines to scroll 642when the cursor gets off the screen. Use this when scrolling is slow. 643 644The 'scrolloff' option can be set to the minimum number of lines to keep 645above and below the cursor. This gives some context to where you are 646editing. When set to a large number the cursor line is always in the middle 647of the window. 648 649Uppercase marks can be used to jump between files. The ":marks" command lists 650all currently set marks. The commands "']" and "`]" jump to the end of the 651previous operator or end of the text inserted with the put command. "'[" and 652"`[" do jump to the start. {Vi: no uppercase marks} 653 654The 'shelltype' option can be set to reflect the type of shell used on the 655Amiga. 656 657The 'highlight' option can be set for the highlight mode to be used for 658several commands. 659 660The CTRL-A (add) and CTRL-X (subtract) commands are new. The count to the 661command (default 1) is added to/subtracted from the number at or after the 662cursor. That number may be decimal, octal (starts with a '0') or hexadecimal 663(starts with '0x'). Very useful in macros. 664 665With the :set command the prefix "inv" can be used to invert boolean options. 666 667In both Vi and Vim you can create a line break with the ":substitute" command 668by using a CTRL-M. For Vi this means you cannot insert a real CTRL-M in the 669text. With Vim you can put a real CTRL-M in the text by preceding it with a 670CTRL-V. 671 672 673In Insert mode: 674 675If the 'revins' option is set, insert happens backwards. This is for typing 676Hebrew. When inserting normal characters the cursor will not be shifted and 677the text moves rightwards. Backspace, CTRL-W and CTRL-U will also work in 678the opposite direction. CTRL-B toggles the 'revins' option. In replace mode 679'revins' has no effect. Only when enabled at compile time. 680 681The backspace key can be used just like CTRL-D to remove auto-indents. 682 683You can backspace, CTRL-U and CTRL-W over line breaks if the 'backspace' (bs) 684option includes "eol". You can backspace over the start of insert if the 685'backspace' option includes "start". 686 687When the 'paste' option is set, a few options are reset and mapping in insert 688mode and abbreviation are disabled. This allows for pasting text in windowing 689systems without unexpected results. When the 'paste' option is reset, the old 690option values are restored. 691 692CTRL-T/CTRL-D always insert/delete an indent in the current line, no matter 693what column the cursor is in. 694 695CTRL-@ (insert previously inserted text) works always (Vi: only when typed as 696first character). 697 698CTRL-A works like CTRL-@ but does not leave insert mode. 699 700CTRL-R {register} can be used to insert the contents of a register. 701 702When the 'smartindent' option is set, C programs will be better auto-indented. 703With 'cindent' even more. 704 705CTRL-Y and CTRL-E can be used to copy a character from above/below the 706current cursor position. 707 708After CTRL-V you can enter a three digit decimal number. This byte value is 709inserted in the text as a single character. Useful for international 710characters that are not on your keyboard. 711 712When the 'expandtab' (et) option is set, a <Tab> is expanded to the 713appropriate number of spaces. 714 715The window always reflects the contents of the buffer (Vi does not do this 716when changing text and in some other cases). 717 718If Vim is compiled with DIGRAPHS defined, digraphs are supported. A set of 719normal digraphs is included. They are shown with the ":digraph" command. 720More can be added with ":digraph {char1}{char2} {number}". A digraph is 721entered with "CTRL-K {char1} {char2}" or "{char1} BS {char2}" (only when 722'digraph' option is set). 723 724When repeating an insert, e.g. "10atest <Esc>" vi would only handle wrapmargin 725for the first insert. Vim does it for all. 726 727A count to the "i" or "a" command is used for all the text. Vi uses the count 728only for one line. "3iabc<NL>def<Esc>" would insert "abcabcabc<NL>def" in Vi 729but "abc<NL>defabc<NL>defabc<NL>def" in Vim. 730 731 732In Command-line mode: 733 734<Esc> terminates the command-line without executing it. In vi the command 735line would be executed, which is not what most people expect (hitting <Esc> 736should always get you back to command mode). To avoid problems with some 737obscure macros, an <Esc> in a macro will execute the command. If you want a 738typed <Esc> to execute the command like vi does you can fix this with 739 ":cmap ^V<Esc> ^V<CR>" 740 741General: 742 743The 'ttimeout' option is like 'timeout', but only works for cursor and 744function keys, not for ordinary mapped characters. The 'timeoutlen' option 745gives the number of milliseconds that is waited for. If the 'esckeys' option 746is not set, cursor and function keys that start with <Esc> are not recognized 747in insert mode. 748 749There is an option for each terminal string. Can be used when termcap is not 750supported or to change individual strings. 751 752The 'fileformat' option can be set to select the <EOL>: "dos" <CR><NL>, "unix" 753<NL> or "mac" <CR>. 754When the 'fileformats' option is not empty, Vim tries to detect the type of 755<EOL> automatically. The 'fileformat' option is set accordingly. 756 757On systems that have no job control (older Unix systems and non-Unix systems) 758the CTRL-Z, ":stop" or ":suspend" command starts a new shell. 759 760If Vim is started on the Amiga without an interactive window for output, a 761window is opened (and :sh still works). You can give a device to use for 762editing with the |-d| argument, e.g. "-d con:20/20/600/150". 763 764The 'columns' and 'lines' options are used to set or get the width and height 765of the display. 766 767Option settings are read from the first and last few lines of the file. 768Option 'modelines' determines how many lines are tried (default is 5). Note 769that this is different from the Vi versions that can execute any Ex command 770in a modeline (a major security problem). |trojan-horse| 771 772If the 'insertmode' option is set (e.g. in .exrc), Vim starts in insert mode. 773And it comes back there, when pressing <Esc>. 774 775Undo information is kept in memory. Available memory limits the number and 776size of change that can be undone. This is hardly a problem on the Amiga and 777almost never with Unix and Win32. 778 779If the 'backup' or 'writebackup' option is set: Before a file is overwritten, 780a backup file (.bak) is made. If the "backup" option is set it is left 781behind. 782 783Vim creates a file ending in ".swp" to store parts of the file that have been 784changed or that do not fit in memory. This file can be used to recover from 785an aborted editing session with "vim -r file". Using the swap file can be 786switched off by setting the 'updatecount' option to 0 or starting Vim with 787the "-n" option. Use the 'directory' option for placing the .swp file 788somewhere else. 789 790Vim is able to work correctly on filesystems with 8.3 file names, also when 791using messydos or crossdos filesystems on the Amiga, or any 8.3 mounted 792filesystem under Unix. See |'shortname'|. 793 794Error messages are shown at least one second (Vi overwrites error messages). 795 796If Vim gives the |hit-enter| prompt, you can hit any key. Characters other 797than <CR>, <NL> and <Space> are interpreted as the (start of) a command. 798{Vi: only ":" commands are interpreted} 799 800The contents of the numbered and unnamed registers is remembered when 801changing files. 802 803The "No lines in buffer" message is a normal message instead of an error 804message, since that may cause a mapping to be aborted. 805{Vi: error messages may be overwritten with other messages before you have a 806chance to read them} 807 808The AUX: device of the Amiga is supported. 809 810============================================================================== 8116. Supported Vi features *vi-features* 812 813Vim supports nearly all Vi commands and mostly in the same way. That is when 814the 'compatible' option is set and 'cpoptions' contains all flags. What the 815effect is of resetting 'compatible' and removing flags from 'cpoptions' can be 816found at the help for the specific command. 817 818The help files used to mark features that are in Vim but not in Vi with {not 819in Vi}. However, since these remarks cluttered the help files we now do it 820the other way around: Below is listed what Vi already supported. Anything 821else has been added by Vim. 822 823 824The following Ex commands are supported by Vi: ~ 825 826`:abbreviate` enter abbreviation 827`:append` append text 828`:args` print the argument list 829`:cd` change directory; Vi: no "cd -" 830`:change` replace a line or series of lines 831`:chdir` change directory 832`:copy` copy lines 833`:delete` delete lines 834`:edit` edit a file 835`:exit` same as `:xit` 836`:file` show or set the current file name; Vi: without the column number 837`:global` execute commands for matching lines 838`:insert` insert text 839`:join` join lines; Vi: not :join! 840`:k` set a mark 841`:list` print lines 842`:map` show or enter a mapping 843`:mark` set a mark 844`:move` move lines 845`:Next` go to previous file in the argument list {Vi: no count} 846`:next` go to next file in the argument list {Vi: no count} 847`:number` print lines with line number 848`:open` start open mode (not implemented in Vim) 849`:pop` jump to older entry in tag stack (only in some versions) 850`:preserve` write all text to swap file {Vi: might also exit} 851`:previous` same as `:Next` {Vi: only in some versions} 852`:print` print lines 853`:put` insert contents of register in the text 854`:quit` quit Vi 855`:read` read file into the text 856`:recover` recover a file from a swap file {Vi: recovers in another way 857 and sends mail if there is something to recover} 858`:rewind` go to the first file in the argument list; no ++opt 859`:set` set option; but not `:set inv{option}`, `:set option&`, 860 `:set all&`, `:set option+=value`, `:set option^=value` 861 `:set option-=value` `:set option<` 862`:shell` escape to a shell 863`:source` read Vi or Ex commands from a file 864`:stop` suspend the editor or escape to a shell 865`:substitute` find and replace text; Vi: no '&', 'i', 's', 'r' or 'I' flag, 866 confirm prompt only supports 'y' and 'n', no highlighting 867`:suspend` same as ":stop" 868`:t` same as ":copy" 869`:tag` jump to tag 870`:unabbreviate` remove abbreviation 871`:undo` undo last change {Vi: only one level} 872`:unmap` remove mapping 873`:vglobal` execute commands for not matching lines 874`:version` print version number and other info 875`:visual` same as ":edit", but turns off "Ex" mode 876`:wq` write to a file and quit Vi 877`:write` write to a file 878`:xit` write if buffer changed and quit Vi 879`:yank` yank lines into a register 880`:z` print some lines {not in all versions of Vi} 881`:!` filter lines or execute an external command 882`:"` comment 883`:#` same as ":number" 884`:*` execute contents of a register 885`:&` repeat last ":substitute" 886`:<` shift lines one 'shiftwidth' left 887`:=` print the cursor line number 888`:>` shift lines one 'shiftwidth' right 889`:@` execute contents of a register; but not `:@`; `:@@` only in 890 some versions 891 892Common for these commands is that Vi doesn't support the ++opt argument on 893`:edit` and other commands that open a file. 894 895 896The following Normal mode commands are supported by Vi: ~ 897 898note: See the beginning of |normal-index| for the meaning of WORD, N, Nmove 899and etc in the description text. 900 901|CTRL-B| scroll N screens Backwards 902|CTRL-C| interrupt current (search) command 903|CTRL-D| scroll Down N lines (default: half a screen); Vim scrolls 904 'scroll' screen lines, Vi scrolls file lines; makes a 905 difference when lines wrap 906|CTRL-E| scroll N lines upwards (N lines Extra) 907|CTRL-F| scroll N screens Forward 908|CTRL-G| display current file name and position 909|<BS>| same as "h" 910|CTRL-H| same as "h" 911|<NL>| same as "j" 912|CTRL-J| same as "j" 913|CTRL-L| redraw screen 914|<CR>| cursor to the first CHAR N lines lower 915|CTRL-M| same as <CR> 916|CTRL-N| same as "j" 917|CTRL-P| same as "k" 918|CTRL-R| in some Vi versions: same as CTRL-L 919|CTRL-T| jump to N older Tag in tag list 920|CTRL-U| N lines Upwards (default: half a screen) {Vi used file lines 921 while Vim scrolls 'scroll' screen lines; makes a difference 922 when lines wrap} 923|CTRL-Y| scroll N lines downwards 924|CTRL-Z| suspend program (or start new shell) 925|CTRL-]| :ta to ident under cursor {Vi: identifier after the cursor} 926|CTRL-^| edit alternate file {Vi: no count} 927|<Space>| same as "l" 928|!| filter Nmove text through the {filter} command 929|!!| filter N lines through the {filter} command 930" use register {a-zA-Z0-9.%#:-"} for next delete, yank or put 931 (uppercase to append) ({.%#:} only work with put) 932|$| cursor to the end of Nth next line 933|%| find the next (curly/square) bracket on this line and go to 934 its match, or go to matching comment bracket, or go to 935 matching preprocessor directive (Vi: no count supported) 936|&| repeat last :s 937|'| jump to mark (Vi: only lowercase marks) 938|(| cursor N sentences backward 939|)| cursor N sentences forward 940|+| same as <CR> 941|,| repeat latest f, t, F or T in opposite direction N times 942|-| cursor to the first CHAR N lines higher 943|.| repeat last change with count replaced with N 944|/| search forward for the Nth occurrence of {pattern} 945|0| cursor to the first char of the line 946|:| start entering an Ex command 947|;| repeat latest f, t, F or T N times 948|<| shift Nmove lines one 'shiftwidth' leftwards 949|<<| shift N lines one 'shiftwidth' leftwards 950|=| filter Nmove lines through "indent" 951|==| filter N lines through "indent" 952|>| shift Nmove lines one 'shiftwidth' rightwards 953|>>| shift N lines one 'shiftwidth' rightwards 954|?| search backward for the Nth previous occurrence of {pattern} 955|@| execute the contents of register {a-z} N times 956 {Vi: only named registers} 957|@@| repeat the previous @{a-z} N times 958|A| append text after the end of the line N times 959|B| cursor N WORDS backward 960|C| change from the cursor position to the end of the line 961|D| delete the characters under the cursor until the end of the 962 line and N-1 more lines [into register x]; synonym for "d$" 963|E| cursor forward to the end of WORD N 964|F| cursor to the Nth occurrence of {char} to the left 965|G| cursor to line N, default last line 966|H| cursor to line N from top of screen 967|I| insert text before the first CHAR on the line N times 968|J| Join N lines; default is 2 969|L| cursor to line N from bottom of screen 970|M| cursor to middle line of screen 971|N| repeat the latest '/' or '?' N times in opposite direction 972|O| begin a new line above the cursor and insert text, repeat N 973 times {Vi: blank [count] screen lines} 974|P| put the text [from register x] before the cursor N times 975 {Vi: no count} 976|Q| switch to "Ex" mode 977|R| enter replace mode: overtype existing characters, repeat the 978 entered text N-1 times 979|S| delete N lines [into register x] and start insert; synonym for 980 "cc". 981|T| cursor till after Nth occurrence of {char} to the left 982|U| undo all latest changes on one line 983 {Vi: while not moved off of the last modified line} 984|W| cursor N WORDS forward 985|X| delete N characters before the cursor [into register x] 986|Y| yank N lines [into register x]; synonym for "yy" 987|ZZ| store current file if modified, and exit 988|[[| cursor N sections backward 989|]]| cursor N sections forward 990|^| cursor to the first CHAR of the line 991|_| cursor to the first CHAR N - 1 lines lower 992|`| cursor to the mark {a-zA-Z0-9} 993|a| append text after the cursor N times 994|b| cursor N words backward 995|c| delete Nmove text [into register x] and start insert 996|cc| delete N lines [into register x] and start insert 997|d| delete Nmove text [into register x] 998|dd| delete N lines [into register x] 999|e| cursor forward to the end of word N 1000|f| cursor to Nth occurrence of {char} to the right 1001|h| cursor N chars to the left 1002|i| insert text before the cursor N times 1003|j| cursor N lines downward 1004|k| cursor N lines upward 1005|l| cursor N chars to the right 1006|m| set mark {A-Za-z} at cursor position 1007|n| repeat the latest '/' or '?' N times 1008|o| begin a new line below the cursor and insert text 1009 {Vi: blank [count] screen lines} 1010|p| put the text [from register x] after the cursor N times 1011 {Vi: no count} 1012|r| replace N chars with {char} {Vi: CTRL-V <CR> still replaces 1013 with a line break, cannot replace something with a <CR>} 1014|s| (substitute) delete N characters [into register x] and start 1015 insert 1016|t| cursor till before Nth occurrence of {char} to the right 1017|u| undo changes {Vi: only one level} 1018|w| cursor N words forward 1019|x| delete N characters under and after the cursor [into register 1020 x] 1021|y| yank Nmove text [into register x] 1022|yy| yank N lines [into register x] 1023|z<CR>| current line to the top 1024|z-| current line to the bottom 1025|z+| cursor on line N 1026|z^| cursor on line N 1027|{| cursor N paragraphs backward 1028| cursor to column N 1029|}| cursor N paragraphs forward 1030|~| switch case of N characters under the cursor; Vim: depends on 1031 'tildeop' {Vi: no count, no 'tildeop'} 1032|<Del>| same as "x" 1033 1034 1035The following commands are supported in Insert mode by Vi: ~ 1036 1037CTRL-@ insert previously inserted text and stop insert 1038 {Vi: only when typed as first char, only up to 128 chars} 1039CTRL-C quit insert mode, without checking for abbreviation, unless 1040 'insertmode' set. 1041CTRL-D delete one shiftwidth of indent in the current line 1042 {Vi: CTRL-D works only when used after autoindent} 1043<BS> delete character before the cursor {Vi: does not delete 1044 autoindents, does not cross lines, does not delete past start 1045 position of insert} 1046CTRL-H same as <BS> 1047<Tab> insert a <Tab> character 1048CTRL-I same as <Tab> 1049<NL> same as <CR> 1050CTRL-J same as <CR> 1051<CR> begin new line 1052CTRL-M same as <CR> 1053CTRL-T insert one shiftwidth of indent in current line {Vi: only when 1054 in indent} 1055CTRL-V {char} insert next non-digit literally {Vi: no decimal byte entry} 1056CTRL-W delete word before the cursor 1057CTRL-Z when 'insertmode' set: suspend Vi 1058<Esc> end insert mode (unless 'insertmode' set) 1059CTRL-[ same as <Esc> 10600 CTRL-D delete all indent in the current line 1061^ CTRL-D delete all indent in the current line, restore it in the next 1062 line 1063<Del> delete character under the cursor 1064 1065 1066The following options are supported by Vi: ~ 1067 1068'autoindent' 'ai' take indent for new line from previous line 1069 {Vi does this slightly differently: After the 1070 indent is deleted when typing <Esc> or <CR>, the 1071 cursor position when moving up or down is after 1072 the deleted indent; Vi puts the cursor somewhere 1073 in the deleted indent}. 1074'autowrite' 'aw' automatically write file if changed 1075'directory' 'dir' list of directory names for the swap file 1076 {Vi: directory to put temp file in, defaults to 1077 "/tmp"} 1078'edcompatible' 'ed' toggle flags of ":substitute" command 1079'errorbells' 'eb' ring the bell for error messages 1080'ignorecase' 'ic' ignore case in search patterns 1081'lines' number of lines in the display 1082'lisp' automatic indenting for Lisp {Vi: Does it a little 1083 bit differently} 1084'list' show <Tab> and <EOL> 1085'magic' changes special characters in search patterns 1086'modeline' 'ml' recognize 'modelines' at start or end of file 1087 {called modelines in some Vi versions} 1088'number' 'nu' print the line number in front of each line 1089'paragraphs' 'para' nroff macros that separate paragraphs 1090'prompt' 'prompt' enable prompt in Ex mode 1091'readonly' 'ro' disallow writing the buffer {Vim sets 'readonly' 1092 when editing a file with `:view`} 1093'remap' allow mappings to work recursively 1094'report' threshold for reporting nr. of lines changed 1095'scroll' 'scr' lines to scroll with CTRL-U and CTRL-D 1096'sections' 'sect' nroff macros that separate sections 1097'shell' 'sh' name of shell to use for external commands 1098'shiftwidth' 'sw' number of spaces to use for (auto)indent step 1099'showmatch' 'sm' briefly jump to matching bracket if insert one 1100'showmode' 'smd' message on status line to show current mode 1101'tabstop' 'ts' number of spaces that <Tab> in file uses 1102'taglength' 'tl' number of significant characters for a tag 1103'tags' 'tag' list of file names used by the tag command 1104 {Vi: default is "tags /usr/lib/tags"} 1105'tagstack' 'tgst' push tags onto the tag stack {not in all versions 1106 of Vi} 1107'term' name of the terminal 1108'terse' shorten some messages 1109'timeout' 'to' time out on mappings and key codes 1110'timeoutlen' 'tm' time for 'timeout' {only in some Vi versions} 1111'ttytype' 'tty' alias for 'term' 1112'verbose' 'vbs' give informative messages {only in some Vi 1113 versions as a boolean option} 1114'warn' warn for shell command when buffer was changed 1115'window' 'wi' nr of lines to scroll for CTRL-F and CTRL-B 1116 {Vi also uses the option to specify the number of 1117 displayed lines} 1118'wrapmargin' 'wm' chars from the right where wrapping starts 1119 {Vi: works differently and less usefully} 1120'wrapscan' 'ws' searches wrap around the end of the file 1121'writeany' 'wa' write to file with no need for "!" override 1122 1123Also see |missing-options|. 1124 1125============================================================================== 11267. Command-line arguments *cmdline-arguments* 1127 1128Different versions of Vi have different command-line arguments. This can be 1129confusing. To help you, this section gives an overview of the differences. 1130 1131Five variants of Vi will be considered here: 1132 Elvis Elvis version 2.1b 1133 Nvi Nvi version 1.79 1134 Posix Posix 1003.2 1135 Vi Vi version 3.7 (for Sun 4.1.x) 1136 Vile Vile version 7.4 (incomplete) 1137 Vim Vim version 5.2 1138 1139Only Vim is able to accept options in between and after the file names. 1140 1141+{command} Elvis, Nvi, Posix, Vi, Vim: Same as "-c {command}". 1142 1143- Nvi, Posix, Vi: Run Ex in batch mode. 1144 Vim: Read file from stdin (use -s for batch mode). 1145 1146-- Vim: End of options, only file names are following. 1147 1148--cmd {command} Vim: execute {command} before sourcing vimrc files. 1149 1150--echo-wid Vim: GTK+ echoes the Window ID on stdout 1151 1152--help Vim: show help message and exit. 1153 1154--literal Vim: take file names literally, don't expand wildcards. 1155 1156--nofork Vim: same as |-f| 1157 1158--noplugin[s] Vim: Skip loading plugins. 1159 1160--remote Vim: edit the files in another Vim server 1161 1162--remote-expr {expr} Vim: evaluate {expr} in another Vim server 1163 1164--remote-send {keys} Vim: send {keys} to a Vim server and exit 1165 1166--remote-silent {file} Vim: edit the files in another Vim server if possible 1167 1168--remote-wait Vim: edit the files in another Vim server and wait for it 1169 1170--remote-wait-silent Vim: like --remote-wait, no complaints if not possible 1171 1172--role {role} Vim: GTK+ 2: set role of main window 1173 1174--serverlist Vim: Output a list of Vim servers and exit 1175 1176--servername {name} Vim: Specify Vim server name 1177 1178--socketid {id} Vim: GTK window socket to run Vim in 1179 1180--windowid {id} Vim: Win32 window ID to run Vim in 1181 1182--version Vim: show version message and exit. 1183 1184-? Vile: print usage summary and exit. 1185 1186-a Elvis: Load all specified file names into a window (use -o for 1187 Vim). 1188 1189-A Vim: Start in Arabic mode (when compiled with Arabic). 1190 1191-b {blksize} Elvis: Use {blksize} blocksize for the session file. 1192-b Vim: set 'binary' mode. 1193 1194-C Vim: Compatible mode. 1195 1196-c {command} Elvis, Nvi, Posix, Vim: run {command} as an Ex command after 1197 loading the edit buffer. 1198 Vim: allow up to 10 "-c" arguments 1199 1200-d {device} Vim: Use {device} for I/O (Amiga only). {only when compiled 1201 without the |+diff| feature} 1202-d Vim: start with 'diff' set. |vimdiff| 1203 1204-dev {device} Vim: Use {device} for I/O (Amiga only). 1205 1206-D Vim: debug mode. 1207 1208-e Elvis, Nvi, Vim: Start in Ex mode, as if the executable is 1209 called "ex". 1210 1211-E Vim: Start in improved Ex mode |gQ|, like "exim". 1212 1213-f Vim: Run GUI in foreground (Amiga: don't open new window). 1214-f {session} Elvis: Use {session} as the session file. 1215 1216-F Vim: Start in Farsi mode (when compiled with Farsi). 1217 Nvi: Fast start, don't read the entire file when editing 1218 starts. 1219 1220-G {gui} Elvis: Use the {gui} as user interface. 1221 1222-g Vim: Start GUI. 1223-g N Vile: start editing at line N 1224 1225-h Vim: Give help message. 1226 Vile: edit the help file 1227 1228-H Vim: start Hebrew mode (when compiled with it). 1229 1230-i Elvis: Start each window in Insert mode. 1231-i {viminfo} Vim: Use {viminfo} for viminfo file. 1232 1233-L Vim: Same as "-r" {only in some versions of Vi: "List 1234 recoverable edit sessions"}. 1235 1236-l Nvi, Vi, Vim: Set 'lisp' and 'showmatch' options. 1237 1238-m Vim: Modifications not allowed to be written, resets 'write' 1239 option. 1240 1241-M Vim: Modifications not allowed, resets 'modifiable' and the 1242 'write' option. 1243 1244-N Vim: No-compatible mode. 1245 1246-n Vim: No swap file used. 1247 1248-nb[args] Vim: open a NetBeans interface connection 1249 1250-O[N] Vim: Like -o, but use vertically split windows. 1251 1252-o[N] Vim: Open [N] windows, or one for each file. 1253 1254-p[N] Vim: Open [N] tab pages, or one for each file. 1255 1256-P {parent-title} Win32 Vim: open Vim inside a parent application window 1257 1258-q {name} Vim: Use {name} for quickfix error file. 1259-q{name} Vim: Idem. 1260 1261-R Elvis, Nvi, Posix, Vile, Vim: Set the 'readonly' option. 1262 1263-r Elvis, Nvi, Posix, Vi, Vim: Recovery mode. 1264 1265-S Nvi: Set 'secure' option. 1266-S {script} Vim: source script after starting up. 1267 1268-s Nvi, Posix, Vim: Same as "-" (silent mode), when in Ex mode. 1269 Elvis: Sets the 'safer' option. 1270-s {scriptin} Vim: Read from script file {scriptin}; only when not in Ex 1271 mode. 1272-s {pattern} Vile: search for {pattern} 1273 1274-t {tag} Elvis, Nvi, Posix, Vi, Vim: Edit the file containing {tag}. 1275-t{tag} Vim: Idem. 1276 1277-T {term} Vim: Set terminal name to {term}. 1278 1279-u {vimrc} Vim: Read initializations from {vimrc} file. 1280 1281-U {gvimrc} Vim: Read GUI initializations from {gvimrc} file. 1282 1283-v Nvi, Posix, Vi, Vim: Begin in Normal mode (visual mode, in Vi 1284 terms). 1285 Vile: View mode, no changes possible. 1286 1287-V Elvis, Vim: Verbose mode. 1288-V{nr} Vim: Verbose mode with specified level. 1289 1290-w {size} Elvis, Posix, Nvi, Vi, Vim: Set value of 'window' to {size}. 1291-w{size} Nvi, Vi: Same as "-w {size}". 1292-w {name} Vim: Write to script file {name} (must start with non-digit). 1293 1294-W {name} Vim: Append to script file {name}. 1295 1296-x Vi, Vim: Ask for encryption key. See |encryption|. 1297 1298-X Vim: Don't connect to the X server. 1299 1300-y Vim: Start in easy mode, like |evim|. 1301 1302-Z Vim: restricted mode 1303 1304@{cmdfile} Vile: use {cmdfile} as startup file. 1305 1306============================================================================== 13078. POSIX compliance *posix* *posix-compliance* 1308 1309In 2005 the POSIX test suite was run to check the compatibility of Vim. Most 1310of the test was executed properly. There are the few things where Vim 1311is not POSIX compliant, even when run in Vi compatibility mode. 1312 *$VIM_POSIX* 1313Set the $VIM_POSIX environment variable to have 'cpoptions' include the POSIX 1314flags when Vim starts up. This makes Vim run as POSIX as it can. That's 1315a bit different from being Vi compatible. 1316 1317You can find the Posix specification for Vi here: 1318https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html 1319And the related Ex specification: 1320https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html 1321 1322This is where Vim does not behave as POSIX specifies and why: 1323 1324 *posix-screen-size* 1325 The $COLUMNS and $LINES environment variables are ignored by Vim if 1326 the size can be obtained from the terminal in a more reliable way. 1327 Add the '|' flag to 'cpoptions' to have $COLUMNS and $LINES overrule 1328 sizes obtained in another way. 1329 1330 The "{" and "}" commands don't stop at a "{" in the original Vi, but 1331 POSIX specifies it does. Add the '{' flag to 'cpoptions' if you want 1332 it the POSIX way. 1333 1334 The "D", "o" and "O" commands accept a count. Also when repeated. 1335 Add the '#' flag to 'cpoptions' if you want to ignore the count. 1336 1337 The ":cd" command fails if the current buffer is modified when the '.' 1338 flag is present in 'cpoptions'. 1339 1340 There is no ATTENTION message, the "A" flag is added to 'shortmess'. 1341 1342These are remarks about running the POSIX test suite: 1343- vi test 33 sometimes fails for unknown reasons 1344- vi test 250 fails; behavior will be changed in a new revision 1345 http://www.opengroup.org/austin/mailarchives/ag-review/msg01710.html 1346 (link no longer works, perhaps it's now: 1347 https://www.opengroup.org/sophocles/show_mail.tpl?CALLER=show_archive.tpl&source=L&listname=austin-review-l&id=1711) 1348- vi test 310 fails; exit code non-zero when any error occurred? 1349- ex test 24 fails because test is wrong. Changed between SUSv2 and SUSv3. 1350- ex tests 47, 48, 49, 72, 73 fail because .exrc file isn't read in silent 1351 mode and $EXINIT isn't used. 1352- ex tests 76, 78 fail because echo is used instead of printf. (fixed) 1353 Also: problem with \s not changed to space. 1354- ex test 355 fails because 'window' isn't used for "30z". 1355- ex test 368 fails because shell command isn't echoed in silent mode. 1356- ex test 394 fails because "=" command output isn't visible in silent mode. 1357- ex test 411 fails because test file is wrong, contains stray ':'. 1358- ex test 475 and 476 fail because reprint output isn't visible in silent mode. 1359- ex test 480 and 481 fail because the tags file has spaces instead of a tab. 1360- ex test 502 fails because .exrc isn't read in silent mode. 1361- ex test 509 fails because .exrc isn't read in silent mode. and exit code is 1362 1 instead of 2. 1363- ex test 534 fails because .exrc isn't read in silent mode. 1364 1365 1366 vim:tw=78:ts=8:noet:ft=help:norl: 1367