blob: d1561a0a2e48866808e1bafbcd4ee3a6e8449e22 [file] [log] [blame]
Bram Moolenaar3b1db362013-08-10 15:00:24 +02001*windows.txt* For Vim version 7.4. Last change: 2012 Nov 15
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Editing with multiple windows and buffers. *windows* *buffers*
8
9The commands which have been added to use multiple windows and buffers are
10explained here. Additionally, there are explanations for commands that work
11differently when used in combination with more than one window.
12
13The basics are explained in chapter 7 and 8 of the user manual |usr_07.txt|
14|usr_08.txt|.
15
161. Introduction |windows-intro|
172. Starting Vim |windows-starting|
183. Opening and closing a window |opening-window|
194. Moving cursor to other windows |window-move-cursor|
205. Moving windows around |window-moving|
216. Window resizing |window-resize|
227. Argument and buffer list commands |buffer-list|
238. Do a command in all buffers or windows |list-repeat|
249. Tag or file name under the cursor |window-tag|
2510. The preview window |preview-window|
2611. Using hidden buffers |buffer-hidden|
2712. Special kinds of buffers |special-buffers|
28
29{Vi does not have any of these commands}
30{not able to use multiple windows when the |+windows| feature was disabled at
31compile time}
32{not able to use vertically split windows when the |+vertsplit| feature was
33disabled at compile time}
34
35==============================================================================
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000361. Introduction *windows-intro* *window*
Bram Moolenaar071d4272004-06-13 20:20:40 +000037
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010038Summary:
39 A buffer is the in-memory text of a file.
40 A window is a viewport on a buffer.
41 A tab page is a collection of windows.
42
Bram Moolenaar071d4272004-06-13 20:20:40 +000043A window is a viewport onto a buffer. You can use multiple windows on one
44buffer, or several windows on different buffers.
45
46A buffer is a file loaded into memory for editing. The original file remains
47unchanged until you write the buffer to the file.
48
49A buffer can be in one of three states:
50
51 *active-buffer*
52active: The buffer is displayed in a window. If there is a file for this
53 buffer, it has been read into the buffer. The buffer may have been
54 modified since then and thus be different from the file.
55 *hidden-buffer*
56hidden: The buffer is not displayed. If there is a file for this buffer, it
57 has been read into the buffer. Otherwise it's the same as an active
58 buffer, you just can't see it.
59 *inactive-buffer*
60inactive: The buffer is not displayed and does not contain anything. Options
61 for the buffer are remembered if the file was once loaded. It can
62 contain marks from the |viminfo| file. But the buffer doesn't
63 contain text.
64
65In a table:
66
67state displayed loaded ":buffers" ~
68 in window shows ~
69active yes yes 'a'
70hidden no yes 'h'
71inactive no no ' '
72
73Note: All CTRL-W commands can also be executed with |:wincmd|, for those
74places where a Normal mode command can't be used or is inconvenient.
75
Bram Moolenaar7e8fd632006-02-18 22:14:51 +000076The main Vim window can hold several split windows. There are also tab pages
77|tab-page|, each of which can hold multiple windows.
78
Bram Moolenaar071d4272004-06-13 20:20:40 +000079==============================================================================
802. Starting Vim *windows-starting*
81
82By default, Vim starts with one window, just like Vi.
83
84The "-o" and "-O" arguments to Vim can be used to open a window for each file
85in the argument list. The "-o" argument will split the windows horizontally;
86the "-O" argument will split the windows vertically. If both "-o" and "-O"
87are given, the last one encountered will be used to determine the split
88orientation. For example, this will open three windows, split horizontally: >
89 vim -o file1 file2 file3
90
91"-oN", where N is a decimal number, opens N windows split horizontally. If
92there are more file names than windows, only N windows are opened and some
93files do not get a window. If there are more windows than file names, the
94last few windows will be editing empty buffers. Similarly, "-ON" opens N
95windows split vertically, with the same restrictions.
96
97If there are many file names, the windows will become very small. You might
98want to set the 'winheight' and/or 'winwidth' options to create a workable
99situation.
100
101Buf/Win Enter/Leave |autocommand|s are not executed when opening the new
102windows and reading the files, that's only done when they are really entered.
103
104 *status-line*
105A status line will be used to separate windows. The 'laststatus' option tells
106when the last window also has a status line:
107 'laststatus' = 0 never a status line
108 'laststatus' = 1 status line if there is more than one window
109 'laststatus' = 2 always a status line
110
111You can change the contents of the status line with the 'statusline' option.
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000112This option can be local to the window, so that you can have a different
113status line in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000114
115Normally, inversion is used to display the status line. This can be changed
116with the 's' character in the 'highlight' option. For example, "sb" sets it to
117bold characters. If no highlighting is used for the status line ("sn"), the
118'^' character is used for the current window, and '=' for other windows. If
119the mouse is supported and enabled with the 'mouse' option, a status line can
120be dragged to resize windows.
121
122Note: If you expect your status line to be in reverse video and it isn't,
123check if the 'highlight' option contains "si". In version 3.0, this meant to
124invert the status line. Now it should be "sr", reverse the status line, as
125"si" now stands for italic! If italic is not available on your terminal, the
126status line is inverted anyway; you will only see this problem on terminals
127that have termcap codes for italics.
128
129==============================================================================
1303. Opening and closing a window *opening-window* *E36*
131
132CTRL-W s *CTRL-W_s*
133CTRL-W S *CTRL-W_S*
134CTRL-W CTRL-S *CTRL-W_CTRL-S*
135:[N]sp[lit] [++opt] [+cmd] *:sp* *:split*
136 Split current window in two. The result is two viewports on
137 the same file. Make new window N high (default is to use half
138 the height of the current window). Reduces the current window
139 height to create room (and others, if the 'equalalways' option
Bram Moolenaar67f71312007-08-12 14:55:56 +0000140 is set, 'eadirection' isn't "hor", and one of them is higher
141 than the current or the new window).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142 Note: CTRL-S does not work on all terminals and might block
143 further input, use CTRL-Q to get going again.
144 Also see |++opt| and |+cmd|.
145
146CTRL-W CTRL-V *CTRL-W_CTRL-V*
147CTRL-W v *CTRL-W_v*
148:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
Bram Moolenaar67f71312007-08-12 14:55:56 +0000149 Like |:split|, but split vertically. The windows will be
150 spread out horizontally if
151 1. a width was not specified,
152 2. 'equalalways' is set,
153 3. 'eadirection' isn't "ver", and
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +0000154 4. one of the other windows is wider than the current or new
Bram Moolenaar67f71312007-08-12 14:55:56 +0000155 window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156 Note: In other places CTRL-Q does the same as CTRL-V, but here
157 it doesn't!
158
159CTRL-W n *CTRL-W_n*
160CTRL-W CTRL_N *CTRL-W_CTRL-N*
161:[N]new [++opt] [+cmd] *:new*
162 Create a new window and start editing an empty file in it.
163 Make new window N high (default is to use half the existing
164 height). Reduces the current window height to create room (and
165 others, if the 'equalalways' option is set and 'eadirection'
166 isn't "hor").
167 Also see |++opt| and |+cmd|.
168 If 'fileformats' is not empty, the first format given will be
169 used for the new buffer. If 'fileformats' is empty, the
170 'fileformat' of the current buffer is used. This can be
171 overridden with the |++opt| argument.
172 Autocommands are executed in this order:
173 1. WinLeave for the current window
174 2. WinEnter for the new window
175 3. BufLeave for the current buffer
176 4. BufEnter for the new buffer
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200177 This behaves like a ":split" first, and then an ":enew"
178 command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179
180:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
181 Like |:new|, but split vertically. If 'equalalways' is set
182 and 'eadirection' isn't "ver" the windows will be spread out
183 horizontally, unless a width was specified.
184
185:[N]new [++opt] [+cmd] {file}
186:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200187 Create a new window and start editing file {file} in it. This
188 behaves like a ":split" first, and then an ":e" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000189 If [+cmd] is given, execute the command when the file has been
190 loaded |+cmd|.
191 Also see |++opt|.
192 Make new window N high (default is to use half the existing
193 height). Reduces the current window height to create room
194 (and others, if the 'equalalways' option is set).
195
196:[N]sv[iew] [++opt] [+cmd] {file} *:sv* *:sview* *splitview*
197 Same as ":split", but set 'readonly' option for this buffer.
198
199:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfind* *splitfind*
Bram Moolenaarc236c162008-07-13 17:41:49 +0000200 Same as ":split", but search for {file} in 'path' like in
201 |:find|. Doesn't split if {file} is not found.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202
203CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
204CTRL-W ^ Does ":split #", split window in two and edit alternate file.
205 When a count is given, it becomes ":split #N", split window
206 and edit buffer N.
207
208Note that the 'splitbelow' and 'splitright' options influence where a new
209window will appear.
210
211 *:vert* *:vertical*
212:vert[ical] {cmd}
213 Execute {cmd}. If it contains a command that splits a window,
214 it will be split vertically.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000215 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216
217:lefta[bove] {cmd} *:lefta* *:leftabove*
218:abo[veleft] {cmd} *:abo* *:aboveleft*
219 Execute {cmd}. If it contains a command that splits a window,
220 it will be opened left (vertical split) or above (horizontal
221 split) the current window. Overrules 'splitbelow' and
222 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000223 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000224
225:rightb[elow] {cmd} *:rightb* *:rightbelow*
226:bel[owright] {cmd} *:bel* *:belowright*
227 Execute {cmd}. If it contains a command that splits a window,
228 it will be opened right (vertical split) or below (horizontal
229 split) the current window. Overrules 'splitbelow' and
230 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000231 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232
233 *:topleft* *E442*
234:to[pleft] {cmd}
235 Execute {cmd}. If it contains a command that splits a window,
236 it will appear at the top and occupy the full width of the Vim
237 window. When the split is vertical the window appears at the
238 far left and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000239 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240
241 *:botright*
242:bo[tright] {cmd}
243 Execute {cmd}. If it contains a command that splits a window,
244 it will appear at the bottom and occupy the full width of the
245 Vim window. When the split is vertical the window appears at
246 the far right and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000247 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248
249These command modifiers can be combined to make a vertically split window
250occupy the full height. Example: >
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200251 :vertical topleft split tags
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252Opens a vertically split, full-height window on the "tags" file at the far
253left of the Vim window.
254
255
256Closing a window
257----------------
258
259CTRL-W q *CTRL-W_q*
260CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
261:q[uit] Quit current window. When quitting the last window (not
262 counting a help window), exit Vim.
263 When 'hidden' is set, and there is only one window for the
264 current buffer, it becomes hidden.
265 When 'hidden' is not set, and there is only one window for the
266 current buffer, and the buffer was changed, the command fails.
267 (Note: CTRL-Q does not work on all terminals)
268
269:q[uit]! Quit current window. If this was the last window for a buffer,
270 any changes to that buffer are lost. When quitting the last
271 window (not counting help windows), exit Vim. The contents of
272 the buffer are lost, even when 'hidden' is set.
273
274CTRL-W c *CTRL-W_c* *:clo* *:close*
275:clo[se][!] Close current window. When the 'hidden' option is set, or
276 when the buffer was changed and the [!] is used, the buffer
277 becomes hidden (unless there is another window editing it).
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000278 When there is only one window in the current tab page and
279 there is another tab page, this closes the current tab page.
280 |tab-page|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281 This command fails when: *E444*
282 - There is only one window on the screen.
283 - When 'hidden' is not set, [!] is not used, the buffer has
284 changes, and there is no other window on this buffer.
285 Changes to the buffer are not written and won't get lost, so
286 this is a "safe" command.
287
288CTRL-W CTRL-C *CTRL-W_CTRL-C*
289 You might have expected that CTRL-W CTRL-C closes the current
290 window, but that does not work, because the CTRL-C cancels the
291 command.
292
293 *:hide*
294:hid[e] Quit current window, unless it is the last window on the
295 screen. The buffer becomes hidden (unless there is another
296 window editing it or 'bufhidden' is "unload" or "delete").
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000297 If the window is the last one in the current tab page the tab
298 page is closed. |tab-page|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299 The value of 'hidden' is irrelevant for this command.
300 Changes to the buffer are not written and won't get lost, so
301 this is a "safe" command.
302
303:hid[e] {cmd} Execute {cmd} with 'hidden' is set. The previous value of
304 'hidden' is restored after {cmd} has been executed.
305 Example: >
306 :hide edit Makefile
307< This will edit "Makefile", and hide the current buffer if it
308 has any changes.
309
310CTRL-W o *CTRL-W_o* *E445*
311CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
312:on[ly][!] Make the current window the only one on the screen. All other
313 windows are closed.
314 When the 'hidden' option is set, all buffers in closed windows
315 become hidden.
316 When 'hidden' is not set, and the 'autowrite' option is set,
317 modified buffers are written. Otherwise, windows that have
318 buffers that are modified are not removed, unless the [!] is
319 given, then they become hidden. But modified buffers are
320 never abandoned, so changes cannot get lost.
321
322==============================================================================
3234. Moving cursor to other windows *window-move-cursor*
324
325CTRL-W <Down> *CTRL-W_<Down>*
326CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
327CTRL-W j Move cursor to Nth window below current one. Uses the cursor
328 position to select between alternatives.
329
330CTRL-W <Up> *CTRL-W_<Up>*
331CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
332CTRL-W k Move cursor to Nth window above current one. Uses the cursor
333 position to select between alternatives.
334
335CTRL-W <Left> *CTRL-W_<Left>*
336CTRL-W CTRL-H *CTRL-W_CTRL-H*
337CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
338CTRL-W h Move cursor to Nth window left of current one. Uses the
339 cursor position to select between alternatives.
340
341CTRL-W <Right> *CTRL-W_<Right>*
342CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
343CTRL-W l Move cursor to Nth window right of current one. Uses the
344 cursor position to select between alternatives.
345
346CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
347CTRL-W CTRL-W Without count: move cursor to window below/right of the
348 current one. If there is no window below or right, go to
349 top-left window.
350 With count: go to Nth window (windows are numbered from
351 top-left to bottom-right). To obtain the window number see
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100352 |bufwinnr()| and |winnr()|. When N is larger than the number
353 of windows go to the last window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354
355 *CTRL-W_W*
356CTRL-W W Without count: move cursor to window above/left of current
357 one. If there is no window above or left, go to bottom-right
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100358 window. With count: go to Nth window, like with CTRL-W w.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000359
360CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
361CTRL-W CTRL-T Move cursor to top-left window.
362
363CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
364CTRL-W CTRL-B Move cursor to bottom-right window.
365
366CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
367CTRL-W CTRL-P Go to previous (last accessed) window.
368
369 *CTRL-W_P* *E441*
370CTRL-W P Go to preview window. When there is no preview window this is
371 an error.
372 {not available when compiled without the |+quickfix| feature}
373
374If Visual mode is active and the new window is not for the same buffer, the
375Visual mode is ended. If the window is on the same buffer, the cursor
376position is set to keep the same Visual area selected.
377
378 *:winc* *:wincmd*
379These commands can also be executed with ":wincmd":
380
381:[count]winc[md] {arg}
382 Like executing CTRL-W [count] {arg}. Example: >
383 :wincmd j
384< Moves to the window below the current one.
385 This command is useful when a Normal mode cannot be used (for
386 the |CursorHold| autocommand event). Or when a Normal mode
387 command is inconvenient.
388 The count can also be a window number. Example: >
389 :exe nr . "wincmd w"
390< This goes to window "nr".
391
392==============================================================================
3935. Moving windows around *window-moving*
394
395CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
396CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
397 the second one, the second one becomes the third one, etc.
398 The last window becomes the first window. The cursor remains
399 in the same window.
400 This only works within the row or column of windows that the
401 current window is in.
402
403 *CTRL-W_R*
404CTRL-W R Rotate windows upwards/leftwards. The second window becomes
405 the first one, the third one becomes the second one, etc. The
406 first window becomes the last window. The cursor remains in
407 the same window.
408 This only works within the row or column of windows that the
409 current window is in.
410
411CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
412CTRL-W CTRL-X Without count: Exchange current window with next one. If there
413 is no next window, exchange with previous window.
414 With count: Exchange current window with Nth window (first
415 window is 1). The cursor is put in the other window.
416 When vertical and horizontal window splits are mixed, the
417 exchange is only done in the row or column of windows that the
418 current window is in.
419
420The following commands can be used to change the window layout. For example,
421when there are two vertically split windows, CTRL-W K will change that in
422horizontally split windows. CTRL-W H does it the other way around.
423
424 *CTRL-W_K*
425CTRL-W K Move the current window to be at the very top, using the full
426 width of the screen. This works like closing the current
427 window and then creating another one with ":topleft split",
428 except that the current window contents is used for the new
429 window.
430
431 *CTRL-W_J*
432CTRL-W J Move the current window to be at the very bottom, using the
433 full width of the screen. This works like closing the current
434 window and then creating another one with ":botright split",
435 except that the current window contents is used for the new
436 window.
437
438 *CTRL-W_H*
439CTRL-W H Move the current window to be at the far left, using the
440 full height of the screen. This works like closing the
441 current window and then creating another one with
442 ":vert topleft split", except that the current window contents
443 is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200444 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000445
446 *CTRL-W_L*
447CTRL-W L Move the current window to be at the far right, using the full
448 height of the screen. This works like closing the
449 current window and then creating another one with
450 ":vert botright split", except that the current window
451 contents is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200452 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000453
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000454 *CTRL-W_T*
455CTRL-W T Move the current window to a new tab page. This fails if
456 there is only one window in the current tab page.
457 When a count is specified the new tab page will be opened
458 before the tab page with this index. Otherwise it comes after
459 the current tab page.
460
Bram Moolenaar071d4272004-06-13 20:20:40 +0000461==============================================================================
4626. Window resizing *window-resize*
463
464 *CTRL-W_=*
465CTRL-W = Make all windows (almost) equally high and wide, but use
466 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000467 Windows with 'winfixheight' set keep their height and windows
468 with 'winfixwidth' set keep their width.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469
470:res[ize] -N *:res* *:resize* *CTRL-W_-*
471CTRL-W - Decrease current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200472 If used after |:vertical|: decrease width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000473
474:res[ize] +N *CTRL-W_+*
475CTRL-W + Increase current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200476 If used after |:vertical|: increase width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000477
478:res[ize] [N]
479CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
480CTRL-W _ Set current window height to N (default: highest possible).
481
482z{nr}<CR> Set current window height to {nr}.
483
484 *CTRL-W_<*
485CTRL-W < Decrease current window width by N (default 1).
486
487 *CTRL-W_>*
488CTRL-W > Increase current window width by N (default 1).
489
490:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
491CTRL-W | Set current window width to N (default: widest possible).
492
493You can also resize a window by dragging a status line up or down with the
494mouse. Or by dragging a vertical separator line left or right. This only
495works if the version of Vim that is being used supports the mouse and the
496'mouse' option has been set to enable it.
497
498The option 'winheight' ('wh') is used to set the minimal window height of the
499current window. This option is used each time another window becomes the
500current window. If the option is '0', it is disabled. Set 'winheight' to a
501very large value, e.g., '9999', to make the current window always fill all
502available space. Set it to a reasonable value, e.g., '10', to make editing in
503the current window comfortable.
504
505The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
506the current window.
507
508When the option 'equalalways' ('ea') is set, all the windows are automatically
509made the same size after splitting or closing a window. If you don't set this
510option, splitting a window will reduce the size of the current window and
511leave the other windows the same. When closing a window, the extra lines are
512given to the window above it.
513
514The 'eadirection' option limits the direction in which the 'equalalways'
515option is applied. The default "both" resizes in both directions. When the
516value is "ver" only the heights of windows are equalized. Use this when you
517have manually resized a vertically split window and want to keep this width.
518Likewise, "hor" causes only the widths of windows to be equalized.
519
520The option 'cmdheight' ('ch') is used to set the height of the command-line.
521If you are annoyed by the |hit-enter| prompt for long messages, set this
522option to 2 or 3.
523
524If there is only one window, resizing that window will also change the command
525line height. If there are several windows, resizing the current window will
526also change the height of the window below it (and sometimes the window above
527it).
528
529The minimal height and width of a window is set with 'winminheight' and
530'winminwidth'. These are hard values, a window will never become smaller.
531
532==============================================================================
5337. Argument and buffer list commands *buffer-list*
534
535 args list buffer list meaning ~
5361. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
5372. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
5383. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
5394. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
5405. :rewind / :first 15. :brewind / :bfirst to first arg/buf
5416. :last 16. :blast to last arg/buf
5427. :all 17. :ball edit all args/buffers
543 18. :unhide edit all loaded buffers
544 19. :[N]bmod [N] to Nth modified buf
545
546 split & args list split & buffer list meaning ~
54721. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
54822. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
54923. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
55024. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
55125. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
55226. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000055327. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000554 38. :sunhide edit all loaded buffers
555 39. :[N]sbmod [N] split + to Nth modified buf
556
55740. :args list of arguments
55841. :buffers list of buffers
559
560The meaning of [N] depends on the command:
561 [N] is number of buffers to go forward/backward on ?2, ?3, and ?4
562 [N] is an argument number, defaulting to current argument, for 1 and 21
563 [N] is a buffer number, defaulting to current buffer, for 11 and 31
564 [N] is a count for 19 and 39
565
566Note: ":next" is an exception, because it must accept a list of file names
567for compatibility with Vi.
568
569
570The argument list and multiple windows
571--------------------------------------
572
573The current position in the argument list can be different for each window.
574Remember that when doing ":e file", the position in the argument list stays
575the same, but you are not editing the file at that position. To indicate
576this, the file message (and the title, if you have one) shows
577"(file (N) of M)", where "(N)" is the current position in the file list, and
578"M" the number of files in the file list.
579
580All the entries in the argument list are added to the buffer list. Thus, you
581can also get to them with the buffer list commands, like ":bnext".
582
583:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
584:[N]sal[l][!] [N]
585 Rearrange the screen to open one window for each argument.
586 All other windows are closed. When a count is given, this is
587 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000588 With the |:tab| modifier open a tab page for each argument.
589 When there are more arguments than 'tabpagemax' further ones
590 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000591 When the 'hidden' option is set, all buffers in closed windows
592 become hidden.
593 When 'hidden' is not set, and the 'autowrite' option is set,
594 modified buffers are written. Otherwise, windows that have
595 buffers that are modified are not removed, unless the [!] is
596 given, then they become hidden. But modified buffers are
597 never abandoned, so changes cannot get lost.
598 [N] is the maximum number of windows to open. 'winheight'
599 also limits the number of windows opened ('winwidth' if
600 |:vertical| was prepended).
601 Buf/Win Enter/Leave autocommands are not executed for the new
602 windows here, that's only done when they are really entered.
603
604:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
605 Short for ":split | argument [N]": split window and go to Nth
606 argument. But when there is no such argument, the window is
607 not split. Also see |++opt| and |+cmd|.
608
609:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
610 Short for ":split | [N]next": split window and go to Nth next
611 argument. But when there is no next file, the window is not
612 split. Also see |++opt| and |+cmd|.
613
614:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
615:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
616 Short for ":split | [N]Next": split window and go to Nth
617 previous argument. But when there is no previous file, the
618 window is not split. Also see |++opt| and |+cmd|.
619
620 *:sre* *:srewind*
621:sre[wind][!] [++opt] [+cmd]
622 Short for ":split | rewind": split window and go to first
623 argument. But when there is no argument list, the window is
624 not split. Also see |++opt| and |+cmd|.
625
626 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000627:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000628 Same as ":srewind".
629
630 *:sla* *:slast*
631:sla[st][!] [++opt] [+cmd]
632 Short for ":split | last": split window and go to last
633 argument. But when there is no argument list, the window is
634 not split. Also see |++opt| and |+cmd|.
635
636 *:dr* *:drop*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000637:dr[op] [++opt] [+cmd] {file} ..
Bram Moolenaar071d4272004-06-13 20:20:40 +0000638 Edit the first {file} in a window.
639 - If the file is already open in a window change to that
640 window.
641 - If the file is not open in a window edit the file in the
642 current window. If the current buffer can't be |abandon|ed,
643 the window is split first.
644 The |argument-list| is set, like with the |:next| command.
645 The purpose of this command is that it can be used from a
646 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000647 When using the |:tab| modifier each argument is opened in a
648 tab page. The last window is used if it's empty.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000649 Also see |++opt| and |+cmd|.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200650 {only available when compiled with a GUI}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000651
652==============================================================================
6538. Do a command in all buffers or windows *list-repeat*
654
655 *:windo*
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000656:windo {cmd} Execute {cmd} in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000657 It works like doing this: >
658 CTRL-W t
659 :{cmd}
660 CTRL-W w
661 :{cmd}
662 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000663< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000664 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000665 windows will not be visited.
666 The last window (or where an error occurred) becomes
667 the current window.
668 {cmd} can contain '|' to concatenate several commands.
669 {cmd} must not open or close windows or reorder them.
670 {not in Vi} {not available when compiled without the
671 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000672 Also see |:tabdo|, |:argdo| and |:bufdo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000673
674 *:bufdo*
675:bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list.
676 It works like doing this: >
677 :bfirst
678 :{cmd}
679 :bnext
680 :{cmd}
681 etc.
682< When the current file can't be |abandon|ed and the [!]
683 is not present, the command fails.
684 When an error is detected on one buffer, further
685 buffers will not be visited.
686 Unlisted buffers are skipped.
687 The last buffer (or where an error occurred) becomes
688 the current buffer.
689 {cmd} can contain '|' to concatenate several commands.
690 {cmd} must not delete buffers or add buffers to the
691 buffer list.
692 Note: While this command is executing, the Syntax
693 autocommand event is disabled by adding it to
694 'eventignore'. This considerably speeds up editing
695 each buffer.
696 {not in Vi} {not available when compiled without the
697 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000698 Also see |:tabdo|, |:argdo| and |:windo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000699
700Examples: >
701
702 :windo set nolist nofoldcolumn | normal zn
703
704This resets the 'list' option and disables folding in all windows. >
705
706 :bufdo set fileencoding= | update
707
708This resets the 'fileencoding' in each buffer and writes it if this changed
709the buffer. The result is that all buffers will use the 'encoding' encoding
710(if conversion works properly).
711
712==============================================================================
7139. Tag or file name under the cursor *window-tag*
714
715 *:sta* *:stag*
716:sta[g][!] [tagname]
717 Does ":tag[!] [tagname]" and splits the window for the found
718 tag. See also |:tag|.
719
720CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
721CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
722 tag and jump to it in the new upper window. Make new window N
723 high.
724
725 *CTRL-W_g]*
726CTRL-W g ] Split current window in two. Use identifier under cursor as a
727 tag and perform ":tselect" on it in the new upper window.
728 Make new window N high.
729
730 *CTRL-W_g_CTRL-]*
731CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
732 tag and perform ":tjump" on it in the new upper window. Make
733 new window N high.
734
735CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
736CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000737 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000738 exist.
739 Uses the 'path' variable as a list of directory names where to
740 look for the file. Also the path for current file is
741 used to search for the file name.
742 If the name is a hypertext link that looks like
743 "type://machine/path", only "/path" is used.
744 If a count is given, the count'th matching file is edited.
745 {not available when the |+file_in_path| feature was disabled
746 at compile time}
747
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000748CTRL-W F *CTRL-W_F*
749 Split current window in two. Edit file name under cursor and
750 jump to the line number following the file name. See |gF| for
751 details on how the line number is obtained.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000752 {not available when the |+file_in_path| feature was disabled
753 at compile time}
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000754
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000755CTRL-W gf *CTRL-W_gf*
756 Open a new tab page and edit the file name under the cursor.
757 Like "tab split" and "gf", but the new tab page isn't created
758 if the file does not exist.
759 {not available when the |+file_in_path| feature was disabled
760 at compile time}
761
Bram Moolenaar57657d82006-04-21 22:12:41 +0000762CTRL-W gF *CTRL-W_gF*
763 Open a new tab page and edit the file name under the cursor
764 and jump to the line number following the file name. Like
765 "tab split" and "gF", but the new tab page isn't created if
766 the file does not exist.
767 {not available when the |+file_in_path| feature was disabled
768 at compile time}
769
Bram Moolenaar071d4272004-06-13 20:20:40 +0000770Also see |CTRL-W_CTRL-I|: open window for an included file that includes
771the keyword under the cursor.
772
773==============================================================================
77410. The preview window *preview-window*
775
776The preview window is a special window to show (preview) another file. It is
777normally a small window used to show an include file or definition of a
778function.
779{not available when compiled without the |+quickfix| feature}
780
Bram Moolenaarc270d802006-03-11 21:29:41 +0000781There can be only one preview window (per tab page). It is created with one
782of the commands below. The 'previewheight' option can be set to specify the
783height of the preview window when it's opened. The 'previewwindow' option is
784set in the preview window to be able to recognize it. The 'winfixheight'
785option is set to have it keep the same height when opening/closing other
786windows.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000787
788 *:pta* *:ptag*
789:pta[g][!] [tagname]
790 Does ":tag[!] [tagname]" and shows the found tag in a
791 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000792 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000793 (like a help window is). If a new one is opened,
794 'previewheight' is used for the height of the window. See
795 also |:tag|.
796 See below for an example. |CursorHold-example|
797 Small difference from |:tag|: When [tagname] is equal to the
798 already displayed tag, the position in the matching tag list
799 is not reset. This makes the CursorHold example work after a
800 |:ptnext|.
801
802CTRL-W z *CTRL-W_z*
803CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
804:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
805 option is set, or when the buffer was changed and the [!] is
806 used, the buffer becomes hidden (unless there is another
807 window editing it). The command fails if any "Preview" buffer
808 cannot be closed. See also |:close|.
809
810 *:pp* *:ppop*
811:[count]pp[op][!]
812 Does ":[count]pop[!]" in the preview window. See |:pop| and
813 |:ptag|. {not in Vi}
814
815CTRL-W } *CTRL-W_}*
816 Use identifier under cursor as a tag and perform a :ptag on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000817 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000818 not given, 'previewheight' is used.
819
820CTRL-W g } *CTRL-W_g}*
821 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000822 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000823 not given, 'previewheight' is used.
824
825 *:ped* *:pedit*
826:ped[it][!] [++opt] [+cmd] {file}
827 Edit {file} in the preview window. The preview window is
828 opened like with |:ptag|. The current window and cursor
829 position isn't changed. Useful example: >
830 :pedit +/fputc /usr/include/stdio.h
831<
832 *:ps* *:psearch*
833:[range]ps[earch][!] [count] [/]pattern[/]
834 Works like |:ijump| but shows the found match in the preview
835 window. The preview window is opened like with |:ptag|. The
836 current window and cursor position isn't changed. Useful
837 example: >
838 :psearch popen
839< Like with the |:ptag| command, you can use this to
840 automatically show information about the word under the
841 cursor. This is less clever than using |:ptag|, but you don't
842 need a tags file and it will also find matches in system
843 include files. Example: >
844 :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
845< Warning: This can be slow.
846
847Example *CursorHold-example* >
848
849 :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")
850
851This will cause a ":ptag" to be executed for the keyword under the cursor,
852when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
853makes other autocommands be executed, so that syntax highlighting works in the
854preview window. The "silent!" avoids an error message when the tag could not
855be found. Also see |CursorHold|. To disable this again: >
856
857 :au! CursorHold
858
859A nice addition is to highlight the found tag, avoid the ":ptag" when there
860is no word under the cursor, and a few other things: >
861
862 :au! CursorHold *.[ch] nested call PreviewWord()
863 :func PreviewWord()
864 : if &previewwindow " don't do this in the preview window
865 : return
866 : endif
867 : let w = expand("<cword>") " get the word under cursor
868 : if w =~ '\a' " if the word contains a letter
869 :
870 : " Delete any existing highlight before showing another tag
871 : silent! wincmd P " jump to preview window
872 : if &previewwindow " if we really get there...
873 : match none " delete existing highlight
874 : wincmd p " back to old window
875 : endif
876 :
877 : " Try displaying a matching tag for the word under the cursor
878 : try
879 : exe "ptag " . w
880 : catch
881 : return
882 : endtry
883 :
884 : silent! wincmd P " jump to preview window
885 : if &previewwindow " if we really get there...
886 : if has("folding")
887 : silent! .foldopen " don't want a closed fold
888 : endif
889 : call search("$", "b") " to end of previous line
890 : let w = substitute(w, '\\', '\\\\', "")
891 : call search('\<\V' . w . '\>') " position cursor on match
892 : " Add a match highlight to the word at this position
893 : hi previewWord term=bold ctermbg=green guibg=green
894 : exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
895 : wincmd p " back to old window
896 : endif
897 : endif
898 :endfun
899
900==============================================================================
90111. Using hidden buffers *buffer-hidden*
902
903A hidden buffer is not displayed in a window, but is still loaded into memory.
904This makes it possible to jump from file to file, without the need to read or
905write the file every time you get another buffer in a window.
906{not available when compiled without the |+listcmds| feature}
907
908 *:buffer-!*
909If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
910commands that start editing another file: ":edit", ":next", ":tag", etc. The
911commands that move through the buffer list sometimes make the current buffer
912hidden although the 'hidden' option is not set. This happens when a buffer is
913modified, but is forced (with '!') to be removed from a window, and
914'autowrite' is off or the buffer can't be written.
915
916You can make a hidden buffer not hidden by starting to edit it with any
917command. Or by deleting it with the ":bdelete" command.
918
919The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
920can be used to make an exception for a specific buffer. It can take these
921values:
922 <empty> Use the value of 'hidden'.
923 hide Hide this buffer, also when 'hidden' is not set.
924 unload Don't hide but unload this buffer, also when 'hidden'
925 is set.
926 delete Delete the buffer.
927
928 *hidden-quit*
929When you try to quit Vim while there is a hidden, modified buffer, you will
930get an error message and Vim will make that buffer the current buffer. You
931can then decide to write this buffer (":wq") or quit without writing (":q!").
932Be careful: there may be more hidden, modified buffers!
933
934A buffer can also be unlisted. This means it exists, but it is not in the
935list of buffers. |unlisted-buffer|
936
937
938:files[!] *:files*
939:buffers[!] *:buffers* *:ls*
940:ls[!] Show all buffers. Example:
941
Bram Moolenaar97d62492012-11-15 21:28:22 +0100942 1 #h "/test/text" line 1 ~
943 2u "asdf" line 0 ~
944 3 %a + "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +0000945
946 When the [!] is included the list will show unlisted buffers
947 (the term "unlisted" is a bit confusing then...).
948
949 Each buffer has a unique number. That number will not change,
950 so you can always go to a specific buffer with ":buffer N" or
951 "N CTRL-^", where N is the buffer number.
952
953 Indicators (chars in the same column are mutually exclusive):
954 u an unlisted buffer (only displayed when [!] is used)
955 |unlisted-buffer|
956 % the buffer in the current window
957 # the alternate buffer for ":e #" and CTRL-^
958 a an active buffer: it is loaded and visible
959 h a hidden buffer: It is loaded, but currently not
960 displayed in a window |hidden-buffer|
961 - a buffer with 'modifiable' off
962 = a readonly buffer
963 + a modified buffer
964 x a buffer with read errors
965
966 *:bad* *:badd*
967:bad[d] [+lnum] {fname}
968 Add file name {fname} to the buffer list, without loading it.
969 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000970 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +0000971 commands after the + will be ignored.
972
973:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
974:bd[elete][!] [N]
975 Unload buffer [N] (default: current buffer) and delete it from
976 the buffer list. If the buffer was changed, this fails,
977 unless when [!] is specified, in which case changes are lost.
978 The file remains unaffected. Any windows for this buffer are
979 closed. If buffer [N] is the current buffer, another buffer
980 will be displayed instead. This is the most recent entry in
981 the jump list that points into a loaded buffer.
982 Actually, the buffer isn't completely deleted, it is removed
983 from the buffer list |unlisted-buffer| and option values,
984 variables and mappings/abbreviations for the buffer are
985 cleared.
986
987:bdelete[!] {bufname} *E93* *E94*
988 Like ":bdelete[!] [N]", but buffer given by name. Note that a
989 buffer whose name is a number cannot be referenced by that
990 name; use the buffer number instead. Insert a backslash
991 before a space in a buffer name.
992
993:bdelete[!] N1 N2 ...
994 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
995 buffer numbers or buffer names (but not buffer names that are
996 a number). Insert a backslash before a space in a buffer
997 name.
998
999:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
1000 |inclusive|.
1001
1002:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
1003:bw[ipeout][!] {bufname}
1004:N,Mbw[ipeout][!]
1005:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00001006 Like |:bdelete|, but really delete the buffer. Everything
1007 related to the buffer is lost. All marks in this buffer
1008 become invalid, option settings are lost, etc. Don't use this
1009 unless you know what you are doing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001010
1011:[N]bun[load][!] *:bun* *:bunload* *E515*
1012:bun[load][!] [N]
1013 Unload buffer [N] (default: current buffer). The memory
1014 allocated for this buffer will be freed. The buffer remains
1015 in the buffer list.
1016 If the buffer was changed, this fails, unless when [!] is
1017 specified, in which case the changes are lost.
1018 Any windows for this buffer are closed. If buffer [N] is the
1019 current buffer, another buffer will be displayed instead.
1020 This is the most recent entry in the jump list that points
1021 into a loaded buffer.
1022
1023:bunload[!] {bufname}
1024 Like ":bunload[!] [N]", but buffer given by name. Note that a
1025 buffer whose name is a number cannot be referenced by that
1026 name; use the buffer number instead. Insert a backslash
1027 before a space in a buffer name.
1028
1029:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1030 |inclusive|.
1031
1032:bunload[!] N1 N2 ...
1033 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1034 buffer numbers or buffer names (but not buffer names that are
1035 a number). Insert a backslash before a space in a buffer
1036 name.
1037
1038:[N]b[uffer][!] [N] *:b* *:bu* *:buf* *:buffer* *E86*
1039 Edit buffer [N] from the buffer list. If [N] is not given,
1040 the current buffer remains being edited. See |:buffer-!| for
1041 [!]. This will also edit a buffer that is not in the buffer
1042 list, without setting the 'buflisted' flag.
1043
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +00001044:[N]b[uffer][!] {bufname}
1045 Edit buffer for {bufname} from the buffer list. See
Bram Moolenaar071d4272004-06-13 20:20:40 +00001046 |:buffer-!| for [!]. This will also edit a buffer that is not
1047 in the buffer list, without setting the 'buflisted' flag.
1048
1049:[N]sb[uffer] [N] *:sb* *:sbuffer*
1050 Split window and edit buffer [N] from the buffer list. If [N]
1051 is not given, the current buffer is edited. Respects the
1052 "useopen" setting of 'switchbuf' when splitting. This will
1053 also edit a buffer that is not in the buffer list, without
1054 setting the 'buflisted' flag.
1055
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +00001056:[N]sb[uffer] {bufname}
1057 Split window and edit buffer for {bufname} from the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001058 list. This will also edit a buffer that is not in the buffer
1059 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001060 Note: If what you want to do is split the buffer, make a copy
1061 under another name, you can do it this way: >
1062 :w foobar | sp #
Bram Moolenaar071d4272004-06-13 20:20:40 +00001063
Bram Moolenaar280f1262006-01-30 00:14:18 +00001064:[N]bn[ext][!] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001065 Go to [N]th next buffer in buffer list. [N] defaults to one.
1066 Wraps around the end of the buffer list.
1067 See |:buffer-!| for [!].
1068 If you are in a help buffer, this takes you to the next help
1069 buffer (if there is one). Similarly, if you are in a normal
1070 (non-help) buffer, this takes you to the next normal buffer.
1071 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001072 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001073 commands also work like this.
1074
1075 *:sbn* *:sbnext*
1076:[N]sbn[ext] [N]
1077 Split window and go to [N]th next buffer in buffer list.
1078 Wraps around the end of the buffer list. Uses 'switchbuf'
1079
1080:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1081:[N]bp[revious][!] [N]
1082 Go to [N]th previous buffer in buffer list. [N] defaults to
1083 one. Wraps around the start of the buffer list.
1084 See |:buffer-!| for [!] and 'switchbuf'.
1085
1086:[N]sbN[ext] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1087:[N]sbp[revious] [N]
1088 Split window and go to [N]th previous buffer in buffer list.
1089 Wraps around the start of the buffer list.
1090 Uses 'switchbuf'.
1091
1092 *:br* *:brewind*
1093:br[ewind][!] Go to first buffer in buffer list. If the buffer list is
1094 empty, go to the first unlisted buffer.
1095 See |:buffer-!| for [!].
1096
1097 *:bf* *:bfirst*
1098:bf[irst] Same as ":brewind".
1099
1100 *:sbr* *:sbrewind*
1101:sbr[ewind] Split window and go to first buffer in buffer list. If the
1102 buffer list is empty, go to the first unlisted buffer.
1103 Respects the 'switchbuf' option.
1104
1105 *:sbf* *:sbfirst*
1106:sbf[irst] Same as ":sbrewind".
1107
1108 *:bl* *:blast*
1109:bl[ast][!] Go to last buffer in buffer list. If the buffer list is
1110 empty, go to the last unlisted buffer.
1111 See |:buffer-!| for [!].
1112
1113 *:sbl* *:sblast*
1114:sbl[ast] Split window and go to last buffer in buffer list. If the
1115 buffer list is empty, go to the last unlisted buffer.
1116 Respects 'switchbuf' option.
1117
1118:[N]bm[odified][!] [N] *:bm* *:bmodified* *E84*
1119 Go to [N]th next modified buffer. Note: this command also
1120 finds unlisted buffers. If there is no modified buffer the
1121 command fails.
1122
1123:[N]sbm[odified] [N] *:sbm* *:sbmodified*
1124 Split window and go to [N]th next modified buffer.
1125 Respects 'switchbuf' option.
1126 Note: this command also finds buffers not in the buffer list.
1127
1128:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1129:[N]sun[hide] [N]
1130 Rearrange the screen to open one window for each loaded buffer
1131 in the buffer list. When a count is given, this is the
1132 maximum number of windows to open.
1133
1134:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1135:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1136 the buffer list. When a count is given, this is the maximum
1137 number of windows to open. 'winheight' also limits the number
1138 of windows opened ('winwidth' if |:vertical| was prepended).
1139 Buf/Win Enter/Leave autocommands are not executed for the new
1140 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001141 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001142 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001143
1144Note: All the commands above that start editing another buffer, keep the
1145'readonly' flag as it was. This differs from the ":edit" command, which sets
1146the 'readonly' flag each time the file is read.
1147
1148==============================================================================
114912. Special kinds of buffers *special-buffers*
1150
1151Instead of containing the text of a file, buffers can also be used for other
1152purposes. A few options can be set to change the behavior of a buffer:
1153 'bufhidden' what happens when the buffer is no longer displayed
1154 in a window.
1155 'buftype' what kind of a buffer this is
1156 'swapfile' whether the buffer will have a swap file
1157 'buflisted' buffer shows up in the buffer list
1158
1159A few useful kinds of a buffer:
1160
Bram Moolenaar280f1262006-01-30 00:14:18 +00001161quickfix Used to contain the error list or the location list. See
1162 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1163 option to "quickfix". You are not supposed to change this!
1164 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001165
1166help Contains a help file. Will only be created with the |:help|
1167 command. The flag that indicates a help buffer is internal
1168 and can't be changed. The 'buflisted' option will be reset
1169 for a help buffer.
1170
Bram Moolenaar677ee682005-01-27 14:41:15 +00001171directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001172 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001173 :setlocal buftype=nowrite
1174 :setlocal bufhidden=delete
1175 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001176< The buffer name is the name of the directory and is adjusted
1177 when using the |:cd| command.
1178
1179scratch Contains text that can be discarded at any time. It is kept
1180 when closing the window, it must be deleted explicitly.
1181 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001182 :setlocal buftype=nofile
1183 :setlocal bufhidden=hide
1184 :setlocal noswapfile
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001185< The buffer name can be used to identify the buffer, if you
1186 give it a meaningful name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001187
1188 *unlisted-buffer*
1189unlisted The buffer is not in the buffer list. It is not used for
1190 normal editing, but to show a help file, remember a file name
1191 or marks. The ":bdelete" command will also set this option,
1192 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001193 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001194<
1195
1196 vim:tw=78:ts=8:ft=help:norl: