1*usr_04.txt* For Vim version 7.3. Last change: 2008 Sep 06 2 3 VIM USER MANUAL - by Bram Moolenaar 4 5 Making small changes 6 7 8This chapter shows you several ways of making corrections and moving text 9around. It teaches you the three basic ways to change text: operator-motion, 10Visual mode and text objects. 11 12|04.1| Operators and motions 13|04.2| Changing text 14|04.3| Repeating a change 15|04.4| Visual mode 16|04.5| Moving text 17|04.6| Copying text 18|04.7| Using the clipboard 19|04.8| Text objects 20|04.9| Replace mode 21|04.10| Conclusion 22 23 Next chapter: |usr_05.txt| Set your settings 24 Previous chapter: |usr_03.txt| Moving around 25Table of contents: |usr_toc.txt| 26 27============================================================================== 28*04.1* Operators and motions 29 30In chapter 2 you learned the "x" command to delete a single character. And 31using a count: "4x" deletes four characters. 32 The "dw" command deletes a word. You may recognize the "w" command as the 33move word command. In fact, the "d" command may be followed by any motion 34command, and it deletes from the current location to the place where the 35cursor winds up. 36 The "4w" command, for example, moves the cursor over four words. The d4w 37command deletes four words. 38 39 To err is human. To really foul up you need a computer. ~ 40 ------------------> 41 d4w 42 43 To err is human. you need a computer. ~ 44 45Vim only deletes up to the position where the motion takes the cursor. That's 46because Vim knows that you probably don't want to delete the first character 47of a word. If you use the "e" command to move to the end of a word, Vim 48guesses that you do want to include that last character: 49 50 To err is human. you need a computer. ~ 51 --------> 52 d2e 53 54 To err is human. a computer. ~ 55 56Whether the character under the cursor is included depends on the command you 57used to move to that character. The reference manual calls this "exclusive" 58when the character isn't included and "inclusive" when it is. 59 60The "$" command moves to the end of a line. The "d$" command deletes from the 61cursor to the end of the line. This is an inclusive motion, thus the last 62character of the line is included in the delete operation: 63 64 To err is human. a computer. ~ 65 ------------> 66 d$ 67 68 To err is human ~ 69 70There is a pattern here: operator-motion. You first type an operator command. 71For example, "d" is the delete operator. Then you type a motion command like 72"4l" or "w". This way you can operate on any text you can move over. 73 74============================================================================== 75*04.2* Changing text 76 77Another operator is "c", change. It acts just like the "d" operator, except 78it leaves you in Insert mode. For example, "cw" changes a word. Or more 79specifically, it deletes a word and then puts you in Insert mode. 80 81 To err is human ~ 82 -------> 83 c2wbe<Esc> 84 85 To be human ~ 86 87This "c2wbe<Esc>" contains these bits: 88 89 c the change operator 90 2w move two words (they are deleted and Insert mode started) 91 be insert this text 92 <Esc> back to Normal mode 93 94If you have paid attention, you will have noticed something strange: The space 95before "human" isn't deleted. There is a saying that for every problem there 96is an answer that is simple, clear, and wrong. That is the case with the 97example used here for the "cw" command. The c operator works just like the 98d operator, with one exception: "cw". It actually works like "ce", change to 99end of word. Thus the space after the word isn't included. This is an 100exception that dates back to the old Vi. Since many people are used to it 101now, the inconsistency has remained in Vim. 102 103 104MORE CHANGES 105 106Like "dd" deletes a whole line, "cc" changes a whole line. It keeps the 107existing indent (leading white space) though. 108 109Just like "d$" deletes until the end of the line, "c$" changes until the end 110of the line. It's like doing "d$" to delete the text and then "a" to start 111Insert mode and append new text. 112 113 114SHORTCUTS 115 116Some operator-motion commands are used so often that they have been given a 117single letter command: 118 119 x stands for dl (delete character under the cursor) 120 X stands for dh (delete character left of the cursor) 121 D stands for d$ (delete to end of the line) 122 C stands for c$ (change to end of the line) 123 s stands for cl (change one character) 124 S stands for cc (change a whole line) 125 126 127WHERE TO PUT THE COUNT 128 129The commands "3dw" and "d3w" delete three words. If you want to get really 130picky about things, the first command, "3dw", deletes one word three times; 131the command "d3w" deletes three words once. This is a difference without a 132distinction. You can actually put in two counts, however. For example, 133"3d2w" deletes two words, repeated three times, for a total of six words. 134 135 136REPLACING WITH ONE CHARACTER 137 138The "r" command is not an operator. It waits for you to type a character, and 139will replace the character under the cursor with it. You could do the same 140with "cl" or with the "s" command, but with "r" you don't have to press <Esc> 141 142 there is somerhing grong here ~ 143 rT rt rw 144 145 There is something wrong here ~ 146 147Using a count with "r" causes that many characters to be replaced with the 148same character. Example: 149 150 There is something wrong here ~ 151 5rx 152 153 There is something xxxxx here ~ 154 155To replace a character with a line break use "r<Enter>". This deletes one 156character and inserts a line break. Using a count here only applies to the 157number of characters deleted: "4r<Enter>" replaces four characters with one 158line break. 159 160============================================================================== 161*04.3* Repeating a change 162 163The "." command is one of the most simple yet powerful commands in Vim. It 164repeats the last change. For instance, suppose you are editing an HTML file 165and want to delete all the <B> tags. You position the cursor on the first < 166and delete the <B> with the command "df>". You then go to the < of the next 167</B> and kill it using the "." command. The "." command executes the last 168change command (in this case, "df>"). To delete another tag, position the 169cursor on the < and use the "." command. 170 171 To <B>generate</B> a table of <B>contents ~ 172 f< find first < ---> 173 df> delete to > --> 174 f< find next < ---------> 175 . repeat df> ---> 176 f< find next < -------------> 177 . repeat df> --> 178 179The "." command works for all changes you make, except for the "u" (undo), 180CTRL-R (redo) and commands that start with a colon (:). 181 182Another example: You want to change the word "four" to "five". It appears 183several times in your text. You can do this quickly with this sequence of 184commands: 185 186 /four<Enter> find the first string "four" 187 cwfive<Esc> change the word to "five" 188 n find the next "four" 189 . repeat the change to "five' 190 n find the next "four" 191 . repeat the change 192 etc. 193 194============================================================================== 195*04.4* Visual mode 196 197To delete simple items the operator-motion changes work quite well. But often 198it's not so easy to decide which command will move over the text you want to 199change. Then you can use Visual mode. 200 201You start Visual mode by pressing "v". You move the cursor over the text you 202want to work on. While you do this, the text is highlighted. Finally type 203the operator command. 204 For example, to delete from halfway one word to halfway another word: 205 206 This is an examination sample of visual mode ~ 207 ----------> 208 velllld 209 210 This is an example of visual mode ~ 211 212When doing this you don't really have to count how many times you have to 213press "l" to end up in the right position. You can immediately see what text 214will be deleted when you press "d". 215 216If at any time you decide you don't want to do anything with the highlighted 217text, just press <Esc> and Visual mode will stop without doing anything. 218 219 220SELECTING LINES 221 222If you want to work on whole lines, use "V" to start Visual mode. You will 223see right away that the whole line is highlighted, without moving around. 224When you move left or right nothing changes. When you move up or down the 225selection is extended whole lines at a time. 226 For example, select three lines with "Vjj": 227 228 +------------------------+ 229 | text more text | 230 >> | more text more text | | 231 selected lines >> | text text text | | Vjj 232 >> | text more | V 233 | more text more | 234 +------------------------+ 235 236 237SELECTING BLOCKS 238 239If you want to work on a rectangular block of characters, use CTRL-V to start 240Visual mode. This is very useful when working on tables. 241 242 name Q1 Q2 Q3 243 pierre 123 455 234 244 john 0 90 39 245 steve 392 63 334 246 247To delete the middle "Q2" column, move the cursor to the "Q" of "Q2". Press 248CTRL-V to start blockwise Visual mode. Now move the cursor three lines down 249with "3j" and to the next word with "w". You can see the first character of 250the last column is included. To exclude it, use "h". Now press "d" and the 251middle column is gone. 252 253 254GOING TO THE OTHER SIDE 255 256If you have selected some text in Visual mode, and discover that you need to 257change the other end of the selection, use the "o" command (Hint: o for other 258end). The cursor will go to the other end, and you can move the cursor to 259change where the selection starts. Pressing "o" again brings you back to the 260other end. 261 262When using blockwise selection, you have four corners. "o" only takes you to 263one of the other corners, diagonally. Use "O" to move to the other corner in 264the same line. 265 266Note that "o" and "O" in Visual mode work very differently from Normal mode, 267where they open a new line below or above the cursor. 268 269============================================================================== 270*04.5* Moving text 271 272When you delete something with the "d", "x", or another command, the text is 273saved. You can paste it back by using the p command. (The Vim name for 274this is put). 275 Take a look at how this works. First you will delete an entire line, by 276putting the cursor on the line you want to delete and typing "dd". Now you 277move the cursor to where you want to put the line and use the "p" (put) 278command. The line is inserted on the line below the cursor. 279 280 a line a line a line 281 line 2 dd line 3 p line 3 282 line 3 line 2 283 284Because you deleted an entire line, the "p" command placed the text line below 285the cursor. If you delete part of a line (a word, for instance), the "p" 286command puts it just after the cursor. 287 288 Some more boring try text to out commands. ~ 289 ----> 290 dw 291 292 Some more boring text to out commands. ~ 293 -------> 294 welp 295 296 Some more boring text to try out commands. ~ 297 298 299MORE ON PUTTING 300 301The "P" command puts text like "p", but before the cursor. When you deleted a 302whole line with "dd", "P" will put it back above the cursor. When you deleted 303a word with "dw", "P" will put it back just before the cursor. 304 305You can repeat putting as many times as you like. The same text will be used. 306 307You can use a count with "p" and "P". The text will be repeated as many times 308as specified with the count. Thus "dd" and then "3p" puts three copies of the 309same deleted line. 310 311 312SWAPPING TWO CHARACTERS 313 314Frequently when you are typing, your fingers get ahead of your brain (or the 315other way around?). The result is a typo such as "teh" for "the". Vim 316makes it easy to correct such problems. Just put the cursor on the e of "teh" 317and execute the command "xp". This works as follows: "x" deletes the 318character e and places it in a register. "p" puts the text after the cursor, 319which is after the h. 320 321 teh th the ~ 322 x p 323 324============================================================================== 325*04.6* Copying text 326 327To copy text from one place to another, you could delete it, use "u" to undo 328the deletion and then "p" to put it somewhere else. There is an easier way: 329yanking. The "y" operator copies text into a register. Then a "p" command 330can be used to put it. 331 Yanking is just a Vim name for copying. The "c" letter was already used 332for the change operator, and "y" was still available. Calling this 333operator "yank" made it easier to remember to use the "y" key. 334 335Since "y" is an operator, you use "yw" to yank a word. A count is possible as 336usual. To yank two words use "y2w". Example: 337 338 let sqr = LongVariable * ~ 339 --------------> 340 y2w 341 342 let sqr = LongVariable * ~ 343 p 344 345 let sqr = LongVariable * LongVariable ~ 346 347Notice that "yw" includes the white space after a word. If you don't want 348this, use "ye". 349 350The "yy" command yanks a whole line, just like "dd" deletes a whole line. 351Unexpectedly, while "D" deletes from the cursor to the end of the line, "Y" 352works like "yy", it yanks the whole line. Watch out for this inconsistency! 353Use "y$" to yank to the end of the line. 354 355 a text line yy a text line a text line 356 line 2 line 2 p line 2 357 last line last line a text line 358 last line 359 360============================================================================== 361*04.7* Using the clipboard 362 363If you are using the GUI version of Vim (gvim), you can find the "Copy" item 364in the "Edit" menu. First select some text with Visual mode, then use the 365Edit/Copy menu. The selected text is now copied to the clipboard. You can 366paste the text in other programs. In Vim itself too. 367 368If you have copied text to the clipboard in another application, you can paste 369it in Vim with the Edit/Paste menu. This works in Normal mode and Insert 370mode. In Visual mode the selected text is replaced with the pasted text. 371 372The "Cut" menu item deletes the text before it's put on the clipboard. The 373"Copy", "Cut" and "Paste" items are also available in the popup menu (only 374when there is a popup menu, of course). If your Vim has a toolbar, you can 375also find these items there. 376 377If you are not using the GUI, or if you don't like using a menu, you have to 378use another way. You use the normal "y" (yank) and "p" (put) commands, but 379prepend "* (double-quote star) before it. To copy a line to the clipboard: > 380 381 "*yy 382 383To put text from the clipboard back into the text: > 384 385 "*p 386 387This only works on versions of Vim that include clipboard support. More about 388the clipboard in section |09.3| and here: |clipboard|. 389 390============================================================================== 391*04.8* Text objects 392 393If the cursor is in the middle of a word and you want to delete that word, you 394need to move back to its start before you can do "dw". There is a simpler way 395to do this: "daw". 396 397 this is some example text. ~ 398 daw 399 400 this is some text. ~ 401 402The "d" of "daw" is the delete operator. "aw" is a text object. Hint: "aw" 403stands for "A Word". Thus "daw" is "Delete A Word". To be precise, the white 404space after the word is also deleted (the white space before the word at the 405end of the line). 406 407Using text objects is the third way to make changes in Vim. We already had 408operator-motion and Visual mode. Now we add operator-text object. 409 It is very similar to operator-motion, but instead of operating on the text 410between the cursor position before and after a movement command, the text 411object is used as a whole. It doesn't matter where in the object the cursor 412was. 413 414To change a whole sentence use "cis". Take this text: 415 416 Hello there. This ~ 417 is an example. Just ~ 418 some text. ~ 419 420Move to the start of the second line, on "is an". Now use "cis": 421 422 Hello there. Just ~ 423 some text. ~ 424 425The cursor is in between the blanks in the first line. Now you type the new 426sentence "Another line.": 427 428 Hello there. Another line. Just ~ 429 some text. ~ 430 431"cis" consists of the "c" (change) operator and the "is" text object. This 432stands for "Inner Sentence". There is also the "as" (a sentence) object. The 433difference is that "as" includes the white space after the sentence and "is" 434doesn't. If you would delete a sentence, you want to delete the white space 435at the same time, thus use "das". If you want to type new text the white 436space can remain, thus you use "cis". 437 438You can also use text objects in Visual mode. It will include the text object 439in the Visual selection. Visual mode continues, thus you can do this several 440times. For example, start Visual mode with "v" and select a sentence with 441"as". Now you can repeat "as" to include more sentences. Finally you use an 442operator to do something with the selected sentences. 443 444You can find a long list of text objects here: |text-objects|. 445 446============================================================================== 447*04.9* Replace mode 448 449The "R" command causes Vim to enter replace mode. In this mode, each 450character you type replaces the one under the cursor. This continues until 451you type <Esc>. 452 In this example you start Replace mode on the first "t" of "text": 453 454 This is text. ~ 455 Rinteresting.<Esc> 456 457 This is interesting. ~ 458 459You may have noticed that this command replaced 5 characters in the line with 460twelve others. The "R" command automatically extends the line if it runs out 461of characters to replace. It will not continue on the next line. 462 463You can switch between Insert mode and Replace mode with the <Insert> key. 464 465When you use <BS> (backspace) to make correction, you will notice that the 466old text is put back. Thus it works like an undo command for the last typed 467character. 468 469============================================================================== 470*04.10* Conclusion 471 472The operators, movement commands and text objects give you the possibility to 473make lots of combinations. Now that you know how it works, you can use N 474operators with M movement commands to make N * M commands! 475 476You can find a list of operators here: |operator| 477 478For example, there are many other ways to delete pieces of text. Here are a 479few often used ones: 480 481x delete character under the cursor (short for "dl") 482X delete character before the cursor (short for "dh") 483D delete from cursor to end of line (short for "d$") 484dw delete from cursor to next start of word 485db delete from cursor to previous start of word 486diw delete word under the cursor (excluding white space) 487daw delete word under the cursor (including white space) 488dG delete until the end of the file 489dgg delete until the start of the file 490 491If you use "c" instead of "d" they become change commands. And with "y" you 492yank the text. And so forth. 493 494 495There are a few often used commands to make changes that didn't fit somewhere 496else: 497 498 ~ change case of the character under the cursor, and move the 499 cursor to the next character. This is not an operator (unless 500 'tildeop' is set), thus you can't use it with a motion 501 command. It does work in Visual mode and changes case for 502 all the selected text then. 503 504 I Start Insert mode after moving the cursor to the first 505 non-blank in the line. 506 507 A Start Insert mode after moving the cursor to the end of the 508 line. 509 510============================================================================== 511 512Next chapter: |usr_05.txt| Set your settings 513 514Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl: 515