Mercurial > vim
annotate runtime/doc/usr_08.txt @ 2235:4ba83ae8d505 vim73
Do not write an undo file if there is nothing to undo.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sun, 30 May 2010 17:17:42 +0200 |
parents | 7c8c7c95a865 |
children | 733f0dc510c3 12b829477c60 |
rev | line source |
---|---|
2154
7c8c7c95a865
First step in the Vim 7.3 branch. Changed version numbers.
Bram Moolenaar <bram@zimbu.org>
parents:
1702
diff
changeset
|
1 *usr_08.txt* For Vim version 7.3a. Last change: 2006 Jul 18 |
7 | 2 |
3 VIM USER MANUAL - by Bram Moolenaar | |
4 | |
5 Splitting windows | |
6 | |
7 | |
8 Display two different files above each other. Or view two locations in the | |
9 file at the same time. See the difference between two files by putting them | |
10 side by side. All this is possible with split windows. | |
11 | |
12 |08.1| Split a window | |
13 |08.2| Split a window on another file | |
14 |08.3| Window size | |
15 |08.4| Vertical splits | |
16 |08.5| Moving windows | |
17 |08.6| Commands for all windows | |
18 |08.7| Viewing differences with vimdiff | |
19 |08.8| Various | |
685 | 20 |08.9| Tab pages |
7 | 21 |
22 Next chapter: |usr_09.txt| Using the GUI | |
23 Previous chapter: |usr_07.txt| Editing more than one file | |
24 Table of contents: |usr_toc.txt| | |
25 | |
26 ============================================================================== | |
27 *08.1* Split a window | |
28 | |
29 The easiest way to open a new window is to use the following command: > | |
30 | |
31 :split | |
32 | |
33 This command splits the screen into two windows and leaves the cursor in the | |
34 top one: | |
35 | |
36 +----------------------------------+ | |
37 |/* file one.c */ | | |
38 |~ | | |
39 |~ | | |
40 |one.c=============================| | |
41 |/* file one.c */ | | |
42 |~ | | |
43 |one.c=============================| | |
44 | | | |
45 +----------------------------------+ | |
46 | |
47 What you see here is two windows on the same file. The line with "====" is | |
48 that status line. It displays information about the window above it. (In | |
49 practice the status line will be in reverse video.) | |
50 The two windows allow you to view two parts of the same file. For example, | |
51 you could make the top window show the variable declarations of a program, and | |
52 the bottom one the code that uses these variables. | |
53 | |
54 The CTRL-W w command can be used to jump between the windows. If you are in | |
55 the top window, CTRL-W w jumps to the window below it. If you are in the | |
236 | 56 bottom window it will jump to the first window. (CTRL-W CTRL-W does the same |
7 | 57 thing, in case you let go of the CTRL key a bit later.) |
58 | |
59 | |
60 CLOSE THE WINDOW | |
61 | |
62 To close a window, use the command: > | |
63 | |
64 :close | |
65 | |
66 Actually, any command that quits editing a file works, like ":quit" and "ZZ". | |
67 But ":close" prevents you from accidentally exiting Vim when you close the | |
68 last window. | |
69 | |
70 | |
71 CLOSING ALL OTHER WINDOWS | |
72 | |
73 If you have opened a whole bunch of windows, but now want to concentrate on | |
74 one of them, this command will be useful: > | |
75 | |
76 :only | |
77 | |
78 This closes all windows, except for the current one. If any of the other | |
79 windows has changes, you will get an error message and that window won't be | |
80 closed. | |
81 | |
82 ============================================================================== | |
83 *08.2* Split a window on another file | |
84 | |
85 The following command opens a second window and starts editing the given file: | |
86 > | |
87 :split two.c | |
88 | |
89 If you were editing one.c, then the result looks like this: | |
90 | |
91 +----------------------------------+ | |
92 |/* file two.c */ | | |
93 |~ | | |
94 |~ | | |
95 |two.c=============================| | |
96 |/* file one.c */ | | |
97 |~ | | |
98 |one.c=============================| | |
99 | | | |
100 +----------------------------------+ | |
101 | |
102 To open a window on a new, empty file, use this: > | |
103 | |
104 :new | |
105 | |
106 You can repeat the ":split" and ":new" commands to create as many windows as | |
107 you like. | |
108 | |
109 ============================================================================== | |
110 *08.3* Window size | |
111 | |
112 The ":split" command can take a number argument. If specified, this will be | |
113 the height of the new window. For example, the following opens a new window | |
114 three lines high and starts editing the file alpha.c: > | |
115 | |
116 :3split alpha.c | |
117 | |
118 For existing windows you can change the size in several ways. When you have a | |
119 working mouse, it is easy: Move the mouse pointer to the status line that | |
120 separates two windows, and drag it up or down. | |
121 | |
122 To increase the size of a window: > | |
123 | |
124 CTRL-W + | |
125 | |
126 To decrease it: > | |
127 | |
128 CTRL-W - | |
129 | |
130 Both of these commands take a count and increase or decrease the window size | |
131 by that many lines. Thus "4 CTRL-W +" make the window four lines higher. | |
132 | |
133 To set the window height to a specified number of lines: > | |
134 | |
135 {height}CTRL-W _ | |
136 | |
137 That's: a number {height}, CTRL-W and then an underscore (the - key with Shift | |
138 on English-US keyboards). | |
139 To make a window as high as it can be, use the CTRL-W _ command without a | |
140 count. | |
141 | |
142 | |
143 USING THE MOUSE | |
144 | |
145 In Vim you can do many things very quickly from the keyboard. Unfortunately, | |
146 the window resizing commands require quite a bit of typing. In this case, | |
147 using the mouse is faster. Position the mouse pointer on a status line. Now | |
148 press the left mouse button and drag. The status line will move, thus making | |
149 the window on one side higher and the other smaller. | |
150 | |
151 | |
152 OPTIONS | |
153 | |
154 The 'winheight' option can be set to a minimal desired height of a window and | |
155 'winminheight' to a hard minimum height. | |
156 Likewise, there is 'winwidth' for the minimal desired width and | |
157 'winminwidth' for the hard minimum width. | |
158 The 'equalalways' option, when set, makes Vim equalize the windows sizes | |
159 when a window is closed or opened. | |
160 | |
161 ============================================================================== | |
162 *08.4* Vertical splits | |
163 | |
164 The ":split" command creates the new window above the current one. To make | |
165 the window appear at the left side, use: > | |
166 | |
167 :vsplit | |
168 | |
169 or: > | |
170 :vsplit two.c | |
171 | |
172 The result looks something like this: | |
173 | |
174 +--------------------------------------+ | |
175 |/* file two.c */ |/* file one.c */ | | |
176 |~ |~ | | |
177 |~ |~ | | |
178 |~ |~ | | |
179 |two.c===============one.c=============| | |
180 | | | |
181 +--------------------------------------+ | |
182 | |
183 Actually, the | lines in the middle will be in reverse video. This is called | |
184 the vertical separator. It separates the two windows left and right of it. | |
185 | |
186 There is also the ":vnew" command, to open a vertically split window on a new, | |
187 empty file. Another way to do this: > | |
188 | |
189 :vertical new | |
190 | |
191 The ":vertical" command can be inserted before another command that splits a | |
192 window. This will cause that command to split the window vertically instead | |
193 of horizontally. (If the command doesn't split a window, it works | |
194 unmodified.) | |
195 | |
196 | |
197 MOVING BETWEEN WINDOWS | |
198 | |
199 Since you can split windows horizontally and vertically as much as you like, | |
1121 | 200 you can create almost any layout of windows. Then you can use these commands |
201 to move between them: | |
7 | 202 |
203 CTRL-W h move to the window on the left | |
204 CTRL-W j move to the window below | |
205 CTRL-W k move to the window above | |
206 CTRL-W l move to the window on the right | |
207 | |
208 CTRL-W t move to the TOP window | |
209 CTRL-W b move to the BOTTOM window | |
210 | |
211 You will notice the same letters as used for moving the cursor. And the | |
212 cursor keys can also be used, if you like. | |
213 More commands to move to other windows: |Q_wi|. | |
214 | |
215 ============================================================================== | |
216 *08.5* Moving windows | |
217 | |
218 You have split a few windows, but now they are in the wrong place. Then you | |
219 need a command to move the window somewhere else. For example, you have three | |
220 windows like this: | |
221 | |
222 +----------------------------------+ | |
223 |/* file two.c */ | | |
224 |~ | | |
225 |~ | | |
226 |two.c=============================| | |
227 |/* file three.c */ | | |
228 |~ | | |
229 |~ | | |
230 |three.c===========================| | |
231 |/* file one.c */ | | |
232 |~ | | |
233 |one.c=============================| | |
234 | | | |
235 +----------------------------------+ | |
236 | |
237 Clearly the last one should be at the top. Go to that window (using CTRL-W w) | |
238 and the type this command: > | |
239 | |
240 CTRL-W K | |
241 | |
242 This uses the uppercase letter K. What happens is that the window is moved to | |
243 the very top. You will notice that K is again used for moving upwards. | |
244 When you have vertical splits, CTRL-W K will move the current window to the | |
1121 | 245 top and make it occupy the full width of the Vim window. If this is your |
7 | 246 layout: |
247 | |
248 +-------------------------------------------+ | |
249 |/* two.c */ |/* three.c */ |/* one.c */ | | |
250 |~ |~ |~ | | |
251 |~ |~ |~ | | |
252 |~ |~ |~ | | |
253 |~ |~ |~ | | |
254 |~ |~ |~ | | |
255 |two.c=========three.c=========one.c========| | |
256 | | | |
257 +-------------------------------------------+ | |
258 | |
259 Then using CTRL-W K in the middle window (three.c) will result in: | |
260 | |
261 +-------------------------------------------+ | |
262 |/* three.c */ | | |
263 |~ | | |
264 |~ | | |
265 |three.c====================================| | |
266 |/* two.c */ |/* one.c */ | | |
267 |~ |~ | | |
268 |two.c==================one.c===============| | |
269 | | | |
270 +-------------------------------------------+ | |
271 | |
272 The other three similar commands (you can probably guess these now): | |
273 | |
274 CTRL-W H move window to the far left | |
275 CTRL-W J move window to the bottom | |
276 CTRL-W L move window to the far right | |
277 | |
278 ============================================================================== | |
279 *08.6* Commands for all windows | |
280 | |
281 When you have several windows open and you want to quit Vim, you can close | |
282 each window separately. A quicker way is using this command: > | |
283 | |
284 :qall | |
285 | |
286 This stands for "quit all". If any of the windows contain changes, Vim will | |
287 not exit. The cursor will automatically be positioned in a window with | |
288 changes. You can then either use ":write" to save the changes, or ":quit!" to | |
289 throw them away. | |
290 | |
291 If you know there are windows with changes, and you want to save all these | |
292 changes, use this command: > | |
293 | |
294 :wall | |
295 | |
296 This stands for "write all". But actually, it only writes files with | |
297 changes. Vim knows it doesn't make sense to write files that were not | |
298 changed. | |
299 And then there is the combination of ":qall" and ":wall": the "write and | |
300 quit all" command: > | |
301 | |
302 :wqall | |
303 | |
304 This writes all modified files and quits Vim. | |
305 Finally, there is a command that quits Vim and throws away all changes: > | |
306 | |
307 :qall! | |
308 | |
309 Be careful, there is no way to undo this command! | |
310 | |
311 | |
312 OPENING A WINDOW FOR ALL ARGUMENTS | |
313 | |
314 To make Vim open a window for each file, start it with the "-o" argument: > | |
315 | |
316 vim -o one.txt two.txt three.txt | |
317 | |
318 This results in: | |
319 | |
320 +-------------------------------+ | |
321 |file one.txt | | |
322 |~ | | |
323 |one.txt========================| | |
324 |file two.txt | | |
325 |~ | | |
326 |two.txt========================| | |
327 |file three.txt | | |
328 |~ | | |
329 |three.txt======================| | |
330 | | | |
331 +-------------------------------+ | |
332 | |
333 The "-O" argument is used to get vertically split windows. | |
334 When Vim is already running, the ":all" command opens a window for each | |
335 file in the argument list. ":vertical all" does it with vertical splits. | |
336 | |
337 ============================================================================== | |
338 *08.7* Viewing differences with vimdiff | |
339 | |
340 There is a special way to start Vim, which shows the differences between two | |
341 files. Let's take a file "main.c" and insert a few characters in one line. | |
342 Write this file with the 'backup' option set, so that the backup file | |
343 "main.c~" will contain the previous version of the file. | |
344 Type this command in a shell (not in Vim): > | |
345 | |
346 vimdiff main.c~ main.c | |
347 | |
348 Vim will start, with two windows side by side. You will only see the line | |
349 in which you added characters, and a few lines above and below it. | |
350 | |
351 VV VV | |
352 +-----------------------------------------+ | |
353 |+ +--123 lines: /* a|+ +--123 lines: /* a| <- fold | |
354 | text | text | | |
355 | text | text | | |
356 | text | text | | |
357 | text | changed text | <- changed line | |
358 | text | text | | |
359 | text | ------------------| <- deleted line | |
360 | text | text | | |
361 | text | text | | |
362 | text | text | | |
363 |+ +--432 lines: text|+ +--432 lines: text| <- fold | |
364 | ~ | ~ | | |
365 | ~ | ~ | | |
366 |main.c~==============main.c==============| | |
367 | | | |
368 +-----------------------------------------+ | |
369 | |
370 (This picture doesn't show the highlighting, use the vimdiff command for a | |
371 better look.) | |
372 | |
373 The lines that were not modified have been collapsed into one line. This is | |
374 called a closed fold. They are indicated in the picture with "<- fold". Thus | |
375 the single fold line at the top stands for 123 text lines. These lines are | |
376 equal in both files. | |
377 The line marked with "<- changed line" is highlighted, and the inserted | |
378 text is displayed with another color. This clearly shows what the difference | |
379 is between the two files. | |
380 The line that was deleted is displayed with "---" in the main.c window. | |
381 See the "<- deleted line" marker in the picture. These characters are not | |
382 really there. They just fill up main.c, so that it displays the same number | |
383 of lines as the other window. | |
384 | |
385 | |
386 THE FOLD COLUMN | |
387 | |
388 Each window has a column on the left with a slightly different background. In | |
389 the picture above these are indicated with "VV". You notice there is a plus | |
390 character there, in front of each closed fold. Move the mouse pointer to that | |
391 plus and click the left button. The fold will open, and you can see the text | |
392 that it contains. | |
393 The fold column contains a minus sign for an open fold. If you click on | |
394 this -, the fold will close. | |
395 Obviously, this only works when you have a working mouse. You can also use | |
396 "zo" to open a fold and "zc" to close it. | |
397 | |
398 | |
399 DIFFING IN VIM | |
400 | |
401 Another way to start in diff mode can be done from inside Vim. Edit the | |
402 "main.c" file, then make a split and show the differences: > | |
403 | |
404 :edit main.c | |
405 :vertical diffsplit main.c~ | |
406 | |
407 The ":vertical" command is used to make the window split vertically. If you | |
408 omit this, you will get a horizontal split. | |
409 | |
410 If you have a patch or diff file, you can use the third way to start diff | |
411 mode. First edit the file to which the patch applies. Then tell Vim the name | |
412 of the patch file: > | |
413 | |
414 :edit main.c | |
415 :vertical diffpatch main.c.diff | |
416 | |
417 WARNING: The patch file must contain only one patch, for the file you are | |
418 editing. Otherwise you will get a lot of error messages, and some files might | |
419 be patched unexpectedly. | |
420 The patching will only be done to the copy of the file in Vim. The file on | |
421 your harddisk will remain unmodified (until you decide to write the file). | |
422 | |
423 | |
424 SCROLL BINDING | |
425 | |
426 When the files have more changes, you can scroll in the usual way. Vim will | |
427 try to keep both the windows start at the same position, so you can easily see | |
428 the differences side by side. | |
429 When you don't want this for a moment, use this command: > | |
430 | |
431 :set noscrollbind | |
432 | |
433 | |
434 JUMPING TO CHANGES | |
435 | |
436 When you have disabled folding in some way, it may be difficult to find the | |
437 changes. Use this command to jump forward to the next change: > | |
438 | |
439 ]c | |
440 | |
441 To go the other way use: > | |
442 | |
443 [c | |
444 | |
445 Prepended a count to jump further away. | |
446 | |
447 | |
448 REMOVING CHANGES | |
449 | |
450 You can move text from one window to the other. This either removes | |
451 differences or adds new ones. Vim doesn't keep the highlighting updated in | |
452 all situations. To update it use this command: > | |
453 | |
454 :diffupdate | |
455 | |
456 To remove a difference, you can move the text in a highlighted block from one | |
457 window to another. Take the "main.c" and "main.c~" example above. Move the | |
458 cursor to the left window, on the line that was deleted in the other window. | |
459 Now type this command: > | |
460 | |
461 dp | |
462 | |
463 The change will be removed by putting the text of the current window in the | |
464 other window. "dp" stands for "diff put". | |
465 You can also do it the other way around. Move the cursor to the right | |
466 window, to the line where "changed" was inserted. Now type this command: > | |
467 | |
468 do | |
469 | |
470 The change will now be removed by getting the text from the other window. | |
471 Since there are no changes left now, Vim puts all text in a closed fold. | |
472 "do" stands for "diff obtain". "dg" would have been better, but that already | |
473 has a different meaning ("dgg" deletes from the cursor until the first line). | |
474 | |
475 For details about diff mode, see |vimdiff|. | |
476 | |
477 ============================================================================== | |
478 *08.8* Various | |
479 | |
480 The 'laststatus' option can be used to specify when the last window has a | |
481 statusline: | |
482 | |
483 0 never | |
484 1 only when there are split windows (the default) | |
485 2 always | |
486 | |
487 Many commands that edit another file have a variant that splits the window. | |
488 For Command-line commands this is done by prepending an "s". For example: | |
489 ":tag" jumps to a tag, ":stag" splits the window and jumps to a | |
490 tag. | |
491 For Normal mode commands a CTRL-W is prepended. CTRL-^ jumps to the | |
492 alternate file, CTRL-W CTRL-^ splits the window and edits the alternate file. | |
493 | |
494 The 'splitbelow' option can be set to make a new window appear below the | |
495 current window. The 'splitright' option can be set to make a vertically split | |
496 window appear right of the current window. | |
497 | |
498 When splitting a window you can prepend a modifier command to tell where the | |
499 window is to appear: | |
500 | |
501 :leftabove {cmd} left or above the current window | |
502 :aboveleft {cmd} idem | |
503 :rightbelow {cmd} right or below the current window | |
504 :belowright {cmd} idem | |
505 :topleft {cmd} at the top or left of the Vim window | |
506 :botright {cmd} at the bottom or right of the Vim window | |
507 | |
685 | 508 |
509 ============================================================================== | |
510 *08.9* Tab pages | |
511 | |
512 You will have noticed that windows never overlap. That means you quickly run | |
513 out of screen space. The solution for this is called Tab pages. | |
514 | |
515 Assume you are editing "thisfile". To create a new tab page use this command: > | |
516 | |
517 :tabedit thatfile | |
518 | |
519 This will edit the file "thatfile" in a window that occupies the whole Vim | |
520 window. And you will notice a bar at the top with the two file names: | |
521 | |
522 +----------------------------------+ | |
687 | 523 | thisfile | /thatfile/ __________X| (thatfile is bold) |
856 | 524 |/* thatfile */ | |
685 | 525 |that | |
526 |that | | |
856 | 527 |~ | |
528 |~ | | |
529 |~ | | |
685 | 530 | | |
531 +----------------------------------+ | |
532 | |
533 You now have two tab pages. The first one has a window for "thisfile" and the | |
534 second one a window for "thatfile". It's like two pages that are on top of | |
535 eachother, with a tab sticking out of each page showing the file name. | |
536 | |
537 Now use the mouse to click on "thisfile" in the top line. The result is | |
538 | |
539 +----------------------------------+ | |
687 | 540 | /thisfile/ | thatfile __________X| (thisfile is bold) |
856 | 541 |/* thisfile */ | |
685 | 542 |this | |
543 |this | | |
856 | 544 |~ | |
545 |~ | | |
546 |~ | | |
685 | 547 | | |
548 +----------------------------------+ | |
549 | |
550 Thus you can switch between tab pages by clicking on the label in the top | |
551 line. If you don't have a mouse or don't want to use it, you can use the "gt" | |
552 command. Mnemonic: Goto Tab. | |
553 | |
554 Now let's create another tab page with the command: > | |
555 | |
556 :tab split | |
557 | |
558 This makes a new tab page with one window that is editing the same buffer as | |
559 the window we were in: | |
560 | |
561 +-------------------------------------+ | |
687 | 562 | thisfile | /thisfile/ | thatfile __X| (thisfile is bold) |
856 | 563 |/* thisfile */ | |
685 | 564 |this | |
565 |this | | |
856 | 566 |~ | |
567 |~ | | |
568 |~ | | |
685 | 569 | | |
570 +-------------------------------------+ | |
571 | |
572 You can put ":tab" before any Ex command that opens a window. The window will | |
573 be opened in a new tab page. Another example: > | |
574 | |
575 :tab help gt | |
576 | |
577 Will show the help text for "gt" in a new tab page. | |
578 | |
579 A few more things you can do with tab pages: | |
580 | |
581 - click with the mouse in the space after the last label | |
856 | 582 The next tab page will be selected, like with "gt". |
685 | 583 |
584 - click with the mouse on the "X" in the top right corner | |
856 | 585 The current tab page will be closed. Unless there are unsaved |
685 | 586 changes in the current tab page. |
587 | |
588 - double click with the mouse in the top line | |
856 | 589 A new tab page will be created. |
685 | 590 |
591 - the "tabonly" command | |
856 | 592 Closes all tab pages except the current one. Unless there are unsaved |
685 | 593 changes in other tab pages. |
594 | |
595 For more information about tab pages see |tab-page|. | |
596 | |
7 | 597 ============================================================================== |
598 | |
599 Next chapter: |usr_09.txt| Using the GUI | |
600 | |
601 Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl: |