1*usr_24.txt* For Vim version 7.3. Last change: 2006 Jul 23 2 3 VIM USER MANUAL - by Bram Moolenaar 4 5 Inserting quickly 6 7 8When entering text, Vim offers various ways to reduce the number of keystrokes 9and avoid typing mistakes. Use Insert mode completion to repeat previously 10typed words. Abbreviate long words to short ones. Type characters that 11aren't on your keyboard. 12 13|24.1| Making corrections 14|24.2| Showing matches 15|24.3| Completion 16|24.4| Repeating an insert 17|24.5| Copying from another line 18|24.6| Inserting a register 19|24.7| Abbreviations 20|24.8| Entering special characters 21|24.9| Digraphs 22|24.10| Normal mode commands 23 24 Next chapter: |usr_25.txt| Editing formatted text 25 Previous chapter: |usr_23.txt| Editing other files 26Table of contents: |usr_toc.txt| 27 28============================================================================== 29*24.1* Making corrections 30 31The <BS> key was already mentioned. It deletes the character just before the 32cursor. The <Del> key does the same for the character under (after) the 33cursor. 34 When you typed a whole word wrong, use CTRL-W: 35 36 The horse had fallen to the sky ~ 37 CTRL-W 38 The horse had fallen to the ~ 39 40If you really messed up a line and want to start over, use CTRL-U to delete 41it. This keeps the text after the cursor and the indent. Only the text from 42the first non-blank to the cursor is deleted. With the cursor on the "f" of 43"fallen" in the next line pressing CTRL-U does this: 44 45 The horse had fallen to the ~ 46 CTRL-U 47 fallen to the ~ 48 49When you spot a mistake a few words back, you need to move the cursor there to 50correct it. For example, you typed this: 51 52 The horse had follen to the ground ~ 53 54You need to change "follen" to "fallen". With the cursor at the end, you 55would type this to correct it: > 56 57 <Esc>4blraA 58 59< get out of Insert mode <Esc> 60 four words back 4b 61 move on top of the "o" l 62 replace with "a" ra 63 restart Insert mode A 64 65Another way to do this: > 66 67 <C-Left><C-Left><C-Left><C-Left><Right><Del>a<End> 68 69< four words back <C-Left><C-Left><C-Left><C-Left> 70 move on top of the "o" <Right> 71 delete the "o" <Del> 72 insert an "a" a 73 go to end of the line <End> 74 75This uses special keys to move around, while remaining in Insert mode. This 76resembles what you would do in a modeless editor. It's easier to remember, 77but takes more time (you have to move your hand from the letters to the cursor 78keys, and the <End> key is hard to press without looking at the keyboard). 79 These special keys are most useful when writing a mapping that doesn't 80leave Insert mode. The extra typing doesn't matter then. 81 An overview of the keys you can use in Insert mode: 82 83 <C-Home> to start of the file 84 <PageUp> a whole screenful up 85 <Home> to start of line 86 <S-Left> one word left 87 <C-Left> one word left 88 <S-Right> one word right 89 <C-Right> one word right 90 <End> to end of the line 91 <PageDown> a whole screenful down 92 <C-End> to end of the file 93 94There are a few more, see |ins-special-special|. 95 96============================================================================== 97*24.2* Showing matches 98 99When you type a ) it would be nice to see with which ( it matches. To make 100Vim do that use this command: > 101 102 :set showmatch 103 104When you now type a text like "(example)", as soon as you type the ) Vim will 105briefly move the cursor to the matching (, keep it there for half a second, 106and move back to where you were typing. 107 In case there is no matching (, Vim will beep. Then you know that you 108might have forgotten the ( somewhere, or typed a ) too many. 109 The match will also be shown for [] and {} pairs. You don't have to wait 110with typing the next character, as soon as Vim sees it the cursor will move 111back and inserting continues as before. 112 You can change the time Vim waits with the 'matchtime' option. For 113example, to make Vim wait one and a half second: > 114 115 :set matchtime=15 116 117The time is specified in tenths of a second. 118 119============================================================================== 120*24.3* Completion 121 122Vim can automatically complete words on insertion. You type the first part of 123a word, press CTRL-P, and Vim guesses the rest. 124 Suppose, for example, that you are creating a C program and want to type in 125the following: 126 127 total = ch_array[0] + ch_array[1] + ch_array[2]; ~ 128 129You start by entering the following: 130 131 total = ch_array[0] + ch_ ~ 132 133At this point, you tell Vim to complete the word using the command CTRL-P. 134Vim searches for a word that starts with what's in front of the cursor. In 135this case, it is "ch_", which matches with the word ch_array. So typing 136CTRL-P gives you the following: 137 138 total = ch_array[0] + ch_array ~ 139 140After a little more typing, you get this (ending in a space): 141 142 total = ch_array[0] + ch_array[1] + ~ 143 144If you now type CTRL-P Vim will search again for a word that completes the 145word before the cursor. Since there is nothing in front of the cursor, it 146finds the first word backwards, which is "ch_array". Typing CTRL-P again 147gives you the next word that matches, in this case "total". A third CTRL-P 148searches further back. If there is nothing else, it causes the editor to run 149out of words, so it returns to the original text, which is nothing. A fourth 150CTRL-P causes the editor to start over again with "ch_array". 151 152To search forward, use CTRL-N. Since the search wraps around the end of the 153file, CTRL-N and CTRL-P will find the same matches, but in a different 154sequence. Hint: CTRL-N is Next-match and CTRL-P is Previous-match. 155 156The Vim editor goes through a lot of effort to find words to complete. By 157default, it searches the following places: 158 159 1. Current file 160 2. Files in other windows 161 3. Other loaded files (hidden buffers) 162 4. Files which are not loaded (inactive buffers) 163 5. Tag files 164 6. All files #included by the current file 165 166 167OPTIONS 168 169You can customize the search order with the 'complete' option. 170 171The 'ignorecase' option is used. When it is set, case differences are ignored 172when searching for matches. 173 174A special option for completion is 'infercase'. This is useful to find 175matches while ignoring case ('ignorecase' must be set) but still using the 176case of the word typed so far. Thus if you type "For" and Vim finds a match 177"fortunately", it will result in "Fortunately". 178 179 180COMPLETING SPECIFIC ITEMS 181 182If you know what you are looking for, you can use these commands to complete 183with a certain type of item: 184 185 CTRL-X CTRL-F file names 186 CTRL-X CTRL-L whole lines 187 CTRL-X CTRL-D macro definitions (also in included files) 188 CTRL-X CTRL-I current and included files 189 CTRL-X CTRL-K words from a dictionary 190 CTRL-X CTRL-T words from a thesaurus 191 CTRL-X CTRL-] tags 192 CTRL-X CTRL-V Vim command line 193 194After each of them CTRL-N can be used to find the next match, CTRL-P to find 195the previous match. 196 More information for each of these commands here: |ins-completion|. 197 198 199COMPLETING FILE NAMES 200 201Let's take CTRL-X CTRL-F as an example. This will find file names. It scans 202the current directory for files and displays each one that matches the word in 203front of the cursor. 204 Suppose, for example, that you have the following files in the current 205directory: 206 207 main.c sub_count.c sub_done.c sub_exit.c 208 209Now enter Insert mode and start typing: 210 211 The exit code is in the file sub ~ 212 213At this point, you enter the command CTRL-X CTRL-F. Vim now completes the 214current word "sub" by looking at the files in the current directory. The 215first match is sub_count.c. This is not the one you want, so you match the 216next file by typing CTRL-N. This match is sub_done.c. Typing CTRL-N again 217takes you to sub_exit.c. The results: 218 219 The exit code is in the file sub_exit.c ~ 220 221If the file name starts with / (Unix) or C:\ (MS-Windows) you can find all 222files in the file system. For example, type "/u" and CTRL-X CTRL-F. This 223will match "/usr" (this is on Unix): 224 225 the file is found in /usr/ ~ 226 227If you now press CTRL-N you go back to "/u". Instead, to accept the "/usr/" 228and go one directory level deeper, use CTRL-X CTRL-F again: 229 230 the file is found in /usr/X11R6/ ~ 231 232The results depend on what is found in your file system, of course. The 233matches are sorted alphabetically. 234 235 236COMPLETING IN SOURCE CODE 237 238Source code files are well structured. That makes it possible to do 239completion in an intelligent way. In Vim this is called Omni completion. In 240some other editors it's called intellisense, but that is a trademark. 241 242The key to Omni completion is CTRL-X CTRL-O. Obviously the O stands for Omni 243here, so that you can remember it easier. Let's use an example for editing C 244source: 245 246 { ~ 247 struct foo *p; ~ 248 p-> ~ 249 250The cursor is after "p->". Now type CTRL-X CTRL-O. Vim will offer you a list 251of alternatives, which are the items that "struct foo" contains. That is 252quite different from using CTRL-P, which would complete any word, while only 253members of "struct foo" are valid here. 254 255For Omni completion to work you may need to do some setup. At least make sure 256filetype plugins are enabled. Your vimrc file should contain a line like 257this: > 258 filetype plugin on 259Or: > 260 filetype plugin indent on 261 262For C code you need to create a tags file and set the 'tags' option. That is 263explained |ft-c-omni|. For other filetypes you may need to do something 264similar, look below |compl-omni-filetypes|. It only works for specific 265filetypes. Check the value of the 'omnifunc' option to find out if it would 266work. 267 268============================================================================== 269*24.4* Repeating an insert 270 271If you press CTRL-A, the editor inserts the text you typed the last time you 272were in Insert mode. 273 Assume, for example, that you have a file that begins with the following: 274 275 "file.h" ~ 276 /* Main program begins */ ~ 277 278You edit this file by inserting "#include " at the beginning of the first 279line: 280 281 #include "file.h" ~ 282 /* Main program begins */ ~ 283 284You go down to the beginning of the next line using the commands "j^". You 285now start to insert a new "#include" line. So you type: > 286 287 i CTRL-A 288 289The result is as follows: 290 291 #include "file.h" ~ 292 #include /* Main program begins */ ~ 293 294The "#include " was inserted because CTRL-A inserts the text of the previous 295insert. Now you type "main.h"<Enter> to finish the line: 296 297 298 #include "file.h" ~ 299 #include "main.h" ~ 300 /* Main program begins */ ~ 301 302The CTRL-@ command does a CTRL-A and then exits Insert mode. That's a quick 303way of doing exactly the same insertion again. 304 305============================================================================== 306*24.5* Copying from another line 307 308The CTRL-Y command inserts the character above the cursor. This is useful 309when you are duplicating a previous line. For example, you have this line of 310C code: 311 312 b_array[i]->s_next = a_array[i]->s_next; ~ 313 314Now you need to type the same line, but with "s_prev" instead of "s_next". 315Start the new line, and press CTRL-Y 14 times, until you are at the "n" of 316"next": 317 318 b_array[i]->s_next = a_array[i]->s_next; ~ 319 b_array[i]->s_ ~ 320 321Now you type "prev": 322 323 b_array[i]->s_next = a_array[i]->s_next; ~ 324 b_array[i]->s_prev ~ 325 326Continue pressing CTRL-Y until the following "next": 327 328 b_array[i]->s_next = a_array[i]->s_next; ~ 329 b_array[i]->s_prev = a_array[i]->s_ ~ 330 331Now type "prev;" to finish it off. 332 333The CTRL-E command acts like CTRL-Y except it inserts the character below the 334cursor. 335 336============================================================================== 337*24.6* Inserting a register 338 339The command CTRL-R {register} inserts the contents of the register. This is 340useful to avoid having to type a long word. For example, you need to type 341this: 342 343 r = VeryLongFunction(a) + VeryLongFunction(b) + VeryLongFunction(c) ~ 344 345The function name is defined in a different file. Edit that file and move the 346cursor on top of the function name there, and yank it into register v: > 347 348 "vyiw 349 350"v is the register specification, "yiw" is yank-inner-word. Now edit the file 351where the new line is to be inserted, and type the first letters: 352 353 r = ~ 354 355Now use CTRL-R v to insert the function name: 356 357 r = VeryLongFunction ~ 358 359You continue to type the characters in between the function name, and use 360CTRL-R v two times more. 361 You could have done the same with completion. Using a register is useful 362when there are many words that start with the same characters. 363 364If the register contains characters such as <BS> or other special characters, 365they are interpreted as if they had been typed from the keyboard. If you do 366not want this to happen (you really want the <BS> to be inserted in the text), 367use the command CTRL-R CTRL-R {register}. 368 369============================================================================== 370*24.7* Abbreviations 371 372An abbreviation is a short word that takes the place of a long one. For 373example, "ad" stands for "advertisement". Vim enables you to type an 374abbreviation and then will automatically expand it for you. 375 To tell Vim to expand "ad" into "advertisement" every time you insert it, 376use the following command: > 377 378 :iabbrev ad advertisement 379 380Now, when you type "ad", the whole word "advertisement" will be inserted into 381the text. This is triggered by typing a character that can't be part of a 382word, for example a space: 383 384 What Is Entered What You See 385 I saw the a I saw the a ~ 386 I saw the ad I saw the ad ~ 387 I saw the ad<Space> I saw the advertisement<Space> ~ 388 389The expansion doesn't happen when typing just "ad". That allows you to type a 390word like "add", which will not get expanded. Only whole words are checked 391for abbreviations. 392 393 394ABBREVIATING SEVERAL WORDS 395 396It is possible to define an abbreviation that results in multiple words. For 397example, to define "JB" as "Jack Benny", use the following command: > 398 399 :iabbrev JB Jack Benny 400 401As a programmer, I use two rather unusual abbreviations: > 402 403 :iabbrev #b /**************************************** 404 :iabbrev #e <Space>****************************************/ 405 406These are used for creating boxed comments. The comment starts with #b, which 407draws the top line. I then type the comment text and use #e to draw the 408bottom line. 409 Notice that the #e abbreviation begins with a space. In other words, the 410first two characters are space-star. Usually Vim ignores spaces between the 411abbreviation and the expansion. To avoid that problem, I spell space as seven 412characters: <, S, p, a, c, e, >. 413 414 Note: 415 ":iabbrev" is a long word to type. ":iab" works just as well. 416 That's abbreviating the abbreviate command! 417 418 419FIXING TYPING MISTAKES 420 421It's very common to make the same typing mistake every time. For example, 422typing "teh" instead of "the". You can fix this with an abbreviation: > 423 424 :abbreviate teh the 425 426You can add a whole list of these. Add one each time you discover a common 427mistake. 428 429 430LISTING ABBREVIATIONS 431 432The ":abbreviate" command lists the abbreviations: 433 434 :abbreviate 435 i #e ****************************************/ 436 i #b /**************************************** 437 i JB Jack Benny 438 i ad advertisement 439 ! teh the 440 441The "i" in the first column indicates Insert mode. These abbreviations are 442only active in Insert mode. Other possible characters are: 443 444 c Command-line mode :cabbrev 445 ! both Insert and Command-line mode :abbreviate 446 447Since abbreviations are not often useful in Command-line mode, you will mostly 448use the ":iabbrev" command. That avoids, for example, that "ad" gets expanded 449when typing a command like: > 450 451 :edit ad 452 453 454DELETING ABBREVIATIONS 455 456To get rid of an abbreviation, use the ":unabbreviate" command. Suppose you 457have the following abbreviation: > 458 459 :abbreviate @f fresh 460 461You can remove it with this command: > 462 463 :unabbreviate @f 464 465While you type this, you will notice that @f is expanded to "fresh". Don't 466worry about this, Vim understands it anyway (except when you have an 467abbreviation for "fresh", but that's very unlikely). 468 To remove all the abbreviations: > 469 470 :abclear 471 472":unabbreviate" and ":abclear" also come in the variants for Insert mode 473(":iunabbreviate and ":iabclear") and Command-line mode (":cunabbreviate" and 474":cabclear"). 475 476 477REMAPPING ABBREVIATIONS 478 479There is one thing to watch out for when defining an abbreviation: The 480resulting string should not be mapped. For example: > 481 482 :abbreviate @a adder 483 :imap dd disk-door 484 485When you now type @a, you will get "adisk-doorer". That's not what you want. 486To avoid this, use the ":noreabbrev" command. It does the same as 487":abbreviate", but avoids that the resulting string is used for mappings: > 488 489 :noreabbrev @a adder 490 491Fortunately, it's unlikely that the result of an abbreviation is mapped. 492 493============================================================================== 494*24.8* Entering special characters 495 496The CTRL-V command is used to insert the next character literally. In other 497words, any special meaning the character has, it will be ignored. For 498example: > 499 500 CTRL-V <Esc> 501 502Inserts an escape character. Thus you don't leave Insert mode. (Don't type 503the space after CTRL-V, it's only to make this easier to read). 504 505 Note: 506 On MS-Windows CTRL-V is used to paste text. Use CTRL-Q instead of 507 CTRL-V. On Unix, on the other hand, CTRL-Q does not work on some 508 terminals, because it has a special meaning. 509 510You can also use the command CTRL-V {digits} to insert a character with the 511decimal number {digits}. For example, the character number 127 is the <Del> 512character (but not necessarily the <Del> key!). To insert <Del> type: > 513 514 CTRL-V 127 515 516You can enter characters up to 255 this way. When you type fewer than two 517digits, a non-digit will terminate the command. To avoid the need of typing a 518non-digit, prepend one or two zeros to make three digits. 519 All the next commands insert a <Tab> and then a dot: 520 521 CTRL-V 9. 522 CTRL-V 09. 523 CTRL-V 009. 524 525To enter a character in hexadecimal, use an "x" after the CTRL-V: > 526 527 CTRL-V x7f 528 529This also goes up to character 255 (CTRL-V xff). You can use "o" to type a 530character as an octal number and two more methods allow you to type up to 531a 16 bit and a 32 bit number (e.g., for a Unicode character): > 532 533 CTRL-V o123 534 CTRL-V u1234 535 CTRL-V U12345678 536 537============================================================================== 538*24.9* Digraphs 539 540Some characters are not on the keyboard. For example, the copyright character 541(�). To type these characters in Vim, you use digraphs, where two characters 542represent one. To enter a �, for example, you press three keys: > 543 544 CTRL-K Co 545 546To find out what digraphs are available, use the following command: > 547 548 :digraphs 549 550Vim will display the digraph table. Here are three lines of it: 551 552 AC ~_ 159 NS | 160 !I � 161 Ct � 162 Pd � 163 Cu � 164 Ye � 165 ~ 553 BB � 166 SE � 167 ': � 168 Co � 169 -a � 170 << � 171 NO � 172 ~ 554 -- � 173 Rg � 174 'm � 175 DG � 176 +- � 177 2S � 178 3S � 179 ~ 555 556This shows, for example, that the digraph you get by typing CTRL-K Pd is the 557character (�). This is character number 163 (decimal). 558 Pd is short for Pound. Most digraphs are selected to give you a hint about 559the character they will produce. If you look through the list you will 560understand the logic. 561 You can exchange the first and second character, if there is no digraph for 562that combination. Thus CTRL-K dP also works. Since there is no digraph for 563"dP" Vim will also search for a "Pd" digraph. 564 565 Note: 566 The digraphs depend on the character set that Vim assumes you are 567 using. On MS-DOS they are different from MS-Windows. Always use 568 ":digraphs" to find out which digraphs are currently available. 569 570You can define your own digraphs. Example: > 571 572 :digraph a" � 573 574This defines that CTRL-K a" inserts an � character. You can also specify the 575character with a decimal number. This defines the same digraph: > 576 577 :digraph a" 228 578 579More information about digraphs here: |digraphs| 580 Another way to insert special characters is with a keymap. More about that 581here: |45.5| 582 583============================================================================== 584*24.10* Normal mode commands 585 586Insert mode offers a limited number of commands. In Normal mode you have many 587more. When you want to use one, you usually leave Insert mode with <Esc>, 588execute the Normal mode command, and re-enter Insert mode with "i" or "a". 589 There is a quicker way. With CTRL-O {command} you can execute any Normal 590mode command from Insert mode. For example, to delete from the cursor to the 591end of the line: > 592 593 CTRL-O D 594 595You can execute only one Normal mode command this way. But you can specify a 596register or a count. A more complicated example: > 597 598 CTRL-O "g3dw 599 600This deletes up to the third word into register g. 601 602============================================================================== 603 604Next chapter: |usr_25.txt| Editing formatted text 605 606Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl: 607