blob: d8d9c9f8235799c1714fa80f1bbece44d851524b [file] [log] [blame]
Bram Moolenaar10c56952007-05-10 18:38:52 +00001*windows.txt* For Vim version 7.1b. Last change: 2007 Mar 17
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
38A window is a viewport onto a buffer. You can use multiple windows on one
39buffer, or several windows on different buffers.
40
41A buffer is a file loaded into memory for editing. The original file remains
42unchanged until you write the buffer to the file.
43
44A buffer can be in one of three states:
45
46 *active-buffer*
47active: The buffer is displayed in a window. If there is a file for this
48 buffer, it has been read into the buffer. The buffer may have been
49 modified since then and thus be different from the file.
50 *hidden-buffer*
51hidden: The buffer is not displayed. If there is a file for this buffer, it
52 has been read into the buffer. Otherwise it's the same as an active
53 buffer, you just can't see it.
54 *inactive-buffer*
55inactive: The buffer is not displayed and does not contain anything. Options
56 for the buffer are remembered if the file was once loaded. It can
57 contain marks from the |viminfo| file. But the buffer doesn't
58 contain text.
59
60In a table:
61
62state displayed loaded ":buffers" ~
63 in window shows ~
64active yes yes 'a'
65hidden no yes 'h'
66inactive no no ' '
67
68Note: All CTRL-W commands can also be executed with |:wincmd|, for those
69places where a Normal mode command can't be used or is inconvenient.
70
Bram Moolenaar7e8fd632006-02-18 22:14:51 +000071The main Vim window can hold several split windows. There are also tab pages
72|tab-page|, each of which can hold multiple windows.
73
Bram Moolenaar071d4272004-06-13 20:20:40 +000074==============================================================================
752. Starting Vim *windows-starting*
76
77By default, Vim starts with one window, just like Vi.
78
79The "-o" and "-O" arguments to Vim can be used to open a window for each file
80in the argument list. The "-o" argument will split the windows horizontally;
81the "-O" argument will split the windows vertically. If both "-o" and "-O"
82are given, the last one encountered will be used to determine the split
83orientation. For example, this will open three windows, split horizontally: >
84 vim -o file1 file2 file3
85
86"-oN", where N is a decimal number, opens N windows split horizontally. If
87there are more file names than windows, only N windows are opened and some
88files do not get a window. If there are more windows than file names, the
89last few windows will be editing empty buffers. Similarly, "-ON" opens N
90windows split vertically, with the same restrictions.
91
92If there are many file names, the windows will become very small. You might
93want to set the 'winheight' and/or 'winwidth' options to create a workable
94situation.
95
96Buf/Win Enter/Leave |autocommand|s are not executed when opening the new
97windows and reading the files, that's only done when they are really entered.
98
99 *status-line*
100A status line will be used to separate windows. The 'laststatus' option tells
101when the last window also has a status line:
102 'laststatus' = 0 never a status line
103 'laststatus' = 1 status line if there is more than one window
104 'laststatus' = 2 always a status line
105
106You can change the contents of the status line with the 'statusline' option.
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000107This option can be local to the window, so that you can have a different
108status line in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109
110Normally, inversion is used to display the status line. This can be changed
111with the 's' character in the 'highlight' option. For example, "sb" sets it to
112bold characters. If no highlighting is used for the status line ("sn"), the
113'^' character is used for the current window, and '=' for other windows. If
114the mouse is supported and enabled with the 'mouse' option, a status line can
115be dragged to resize windows.
116
117Note: If you expect your status line to be in reverse video and it isn't,
118check if the 'highlight' option contains "si". In version 3.0, this meant to
119invert the status line. Now it should be "sr", reverse the status line, as
120"si" now stands for italic! If italic is not available on your terminal, the
121status line is inverted anyway; you will only see this problem on terminals
122that have termcap codes for italics.
123
124==============================================================================
1253. Opening and closing a window *opening-window* *E36*
126
127CTRL-W s *CTRL-W_s*
128CTRL-W S *CTRL-W_S*
129CTRL-W CTRL-S *CTRL-W_CTRL-S*
130:[N]sp[lit] [++opt] [+cmd] *:sp* *:split*
131 Split current window in two. The result is two viewports on
132 the same file. Make new window N high (default is to use half
133 the height of the current window). Reduces the current window
134 height to create room (and others, if the 'equalalways' option
135 is set and 'eadirection' isn't "hor").
136 Note: CTRL-S does not work on all terminals and might block
137 further input, use CTRL-Q to get going again.
138 Also see |++opt| and |+cmd|.
139
140CTRL-W CTRL-V *CTRL-W_CTRL-V*
141CTRL-W v *CTRL-W_v*
142:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
143 Like |:split|, but split vertically. If 'equalalways' is set
144 and 'eadirection' isn't "ver" the windows will be spread out
145 horizontally, unless a width was specified.
146 Note: In other places CTRL-Q does the same as CTRL-V, but here
147 it doesn't!
148
149CTRL-W n *CTRL-W_n*
150CTRL-W CTRL_N *CTRL-W_CTRL-N*
151:[N]new [++opt] [+cmd] *:new*
152 Create a new window and start editing an empty file in it.
153 Make new window N high (default is to use half the existing
154 height). Reduces the current window height to create room (and
155 others, if the 'equalalways' option is set and 'eadirection'
156 isn't "hor").
157 Also see |++opt| and |+cmd|.
158 If 'fileformats' is not empty, the first format given will be
159 used for the new buffer. If 'fileformats' is empty, the
160 'fileformat' of the current buffer is used. This can be
161 overridden with the |++opt| argument.
162 Autocommands are executed in this order:
163 1. WinLeave for the current window
164 2. WinEnter for the new window
165 3. BufLeave for the current buffer
166 4. BufEnter for the new buffer
167 This behaves like a ":split" first, and then a ":e" command.
168
169:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
170 Like |:new|, but split vertically. If 'equalalways' is set
171 and 'eadirection' isn't "ver" the windows will be spread out
172 horizontally, unless a width was specified.
173
174:[N]new [++opt] [+cmd] {file}
175:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
176 Create a new window and start editing file {file} in it.
177 If [+cmd] is given, execute the command when the file has been
178 loaded |+cmd|.
179 Also see |++opt|.
180 Make new window N high (default is to use half the existing
181 height). Reduces the current window height to create room
182 (and others, if the 'equalalways' option is set).
183
184:[N]sv[iew] [++opt] [+cmd] {file} *:sv* *:sview* *splitview*
185 Same as ":split", but set 'readonly' option for this buffer.
186
187:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfind* *splitfind*
188 Same as ":split", but search for {file} in 'path'. Doesn't
189 split if {file} is not found.
190
191CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
192CTRL-W ^ Does ":split #", split window in two and edit alternate file.
193 When a count is given, it becomes ":split #N", split window
194 and edit buffer N.
195
196Note that the 'splitbelow' and 'splitright' options influence where a new
197window will appear.
198
199 *:vert* *:vertical*
200:vert[ical] {cmd}
201 Execute {cmd}. If it contains a command that splits a window,
202 it will be split vertically.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000203 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204
205:lefta[bove] {cmd} *:lefta* *:leftabove*
206:abo[veleft] {cmd} *:abo* *:aboveleft*
207 Execute {cmd}. If it contains a command that splits a window,
208 it will be opened left (vertical split) or above (horizontal
209 split) the current window. Overrules 'splitbelow' and
210 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000211 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212
213:rightb[elow] {cmd} *:rightb* *:rightbelow*
214:bel[owright] {cmd} *:bel* *:belowright*
215 Execute {cmd}. If it contains a command that splits a window,
216 it will be opened right (vertical split) or below (horizontal
217 split) the current window. Overrules 'splitbelow' and
218 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000219 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000220
221 *:topleft* *E442*
222:to[pleft] {cmd}
223 Execute {cmd}. If it contains a command that splits a window,
224 it will appear at the top and occupy the full width of the Vim
225 window. When the split is vertical the window appears at the
226 far left and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000227 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228
229 *:botright*
230:bo[tright] {cmd}
231 Execute {cmd}. If it contains a command that splits a window,
232 it will appear at the bottom and occupy the full width of the
233 Vim window. When the split is vertical the window appears at
234 the far right and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000235 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236
237These command modifiers can be combined to make a vertically split window
238occupy the full height. Example: >
239 :vertical topleft edit tags
240Opens a vertically split, full-height window on the "tags" file at the far
241left of the Vim window.
242
243
244Closing a window
245----------------
246
247CTRL-W q *CTRL-W_q*
248CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
249:q[uit] Quit current window. When quitting the last window (not
250 counting a help window), exit Vim.
251 When 'hidden' is set, and there is only one window for the
252 current buffer, it becomes hidden.
253 When 'hidden' is not set, and there is only one window for the
254 current buffer, and the buffer was changed, the command fails.
255 (Note: CTRL-Q does not work on all terminals)
256
257:q[uit]! Quit current window. If this was the last window for a buffer,
258 any changes to that buffer are lost. When quitting the last
259 window (not counting help windows), exit Vim. The contents of
260 the buffer are lost, even when 'hidden' is set.
261
262CTRL-W c *CTRL-W_c* *:clo* *:close*
263:clo[se][!] Close current window. When the 'hidden' option is set, or
264 when the buffer was changed and the [!] is used, the buffer
265 becomes hidden (unless there is another window editing it).
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000266 When there is only one window in the current tab page and
267 there is another tab page, this closes the current tab page.
268 |tab-page|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269 This command fails when: *E444*
270 - There is only one window on the screen.
271 - When 'hidden' is not set, [!] is not used, the buffer has
272 changes, and there is no other window on this buffer.
273 Changes to the buffer are not written and won't get lost, so
274 this is a "safe" command.
275
276CTRL-W CTRL-C *CTRL-W_CTRL-C*
277 You might have expected that CTRL-W CTRL-C closes the current
278 window, but that does not work, because the CTRL-C cancels the
279 command.
280
281 *:hide*
282:hid[e] Quit current window, unless it is the last window on the
283 screen. The buffer becomes hidden (unless there is another
284 window editing it or 'bufhidden' is "unload" or "delete").
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000285 If the window is the last one in the current tab page the tab
286 page is closed. |tab-page|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287 The value of 'hidden' is irrelevant for this command.
288 Changes to the buffer are not written and won't get lost, so
289 this is a "safe" command.
290
291:hid[e] {cmd} Execute {cmd} with 'hidden' is set. The previous value of
292 'hidden' is restored after {cmd} has been executed.
293 Example: >
294 :hide edit Makefile
295< This will edit "Makefile", and hide the current buffer if it
296 has any changes.
297
298CTRL-W o *CTRL-W_o* *E445*
299CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
300:on[ly][!] Make the current window the only one on the screen. All other
301 windows are closed.
302 When the 'hidden' option is set, all buffers in closed windows
303 become hidden.
304 When 'hidden' is not set, and the 'autowrite' option is set,
305 modified buffers are written. Otherwise, windows that have
306 buffers that are modified are not removed, unless the [!] is
307 given, then they become hidden. But modified buffers are
308 never abandoned, so changes cannot get lost.
309
310==============================================================================
3114. Moving cursor to other windows *window-move-cursor*
312
313CTRL-W <Down> *CTRL-W_<Down>*
314CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
315CTRL-W j Move cursor to Nth window below current one. Uses the cursor
316 position to select between alternatives.
317
318CTRL-W <Up> *CTRL-W_<Up>*
319CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
320CTRL-W k Move cursor to Nth window above current one. Uses the cursor
321 position to select between alternatives.
322
323CTRL-W <Left> *CTRL-W_<Left>*
324CTRL-W CTRL-H *CTRL-W_CTRL-H*
325CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
326CTRL-W h Move cursor to Nth window left of current one. Uses the
327 cursor position to select between alternatives.
328
329CTRL-W <Right> *CTRL-W_<Right>*
330CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
331CTRL-W l Move cursor to Nth window right of current one. Uses the
332 cursor position to select between alternatives.
333
334CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
335CTRL-W CTRL-W Without count: move cursor to window below/right of the
336 current one. If there is no window below or right, go to
337 top-left window.
338 With count: go to Nth window (windows are numbered from
339 top-left to bottom-right). To obtain the window number see
340 |bufwinnr()| and |winnr()|.
341
342 *CTRL-W_W*
343CTRL-W W Without count: move cursor to window above/left of current
344 one. If there is no window above or left, go to bottom-right
345 window. With count: go to Nth window (windows are numbered
346 from top-left to bottom-right).
347
348CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
349CTRL-W CTRL-T Move cursor to top-left window.
350
351CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
352CTRL-W CTRL-B Move cursor to bottom-right window.
353
354CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
355CTRL-W CTRL-P Go to previous (last accessed) window.
356
357 *CTRL-W_P* *E441*
358CTRL-W P Go to preview window. When there is no preview window this is
359 an error.
360 {not available when compiled without the |+quickfix| feature}
361
362If Visual mode is active and the new window is not for the same buffer, the
363Visual mode is ended. If the window is on the same buffer, the cursor
364position is set to keep the same Visual area selected.
365
366 *:winc* *:wincmd*
367These commands can also be executed with ":wincmd":
368
369:[count]winc[md] {arg}
370 Like executing CTRL-W [count] {arg}. Example: >
371 :wincmd j
372< Moves to the window below the current one.
373 This command is useful when a Normal mode cannot be used (for
374 the |CursorHold| autocommand event). Or when a Normal mode
375 command is inconvenient.
376 The count can also be a window number. Example: >
377 :exe nr . "wincmd w"
378< This goes to window "nr".
379
380==============================================================================
3815. Moving windows around *window-moving*
382
383CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
384CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
385 the second one, the second one becomes the third one, etc.
386 The last window becomes the first window. The cursor remains
387 in the same window.
388 This only works within the row or column of windows that the
389 current window is in.
390
391 *CTRL-W_R*
392CTRL-W R Rotate windows upwards/leftwards. The second window becomes
393 the first one, the third one becomes the second one, etc. The
394 first window becomes the last window. The cursor remains in
395 the same window.
396 This only works within the row or column of windows that the
397 current window is in.
398
399CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
400CTRL-W CTRL-X Without count: Exchange current window with next one. If there
401 is no next window, exchange with previous window.
402 With count: Exchange current window with Nth window (first
403 window is 1). The cursor is put in the other window.
404 When vertical and horizontal window splits are mixed, the
405 exchange is only done in the row or column of windows that the
406 current window is in.
407
408The following commands can be used to change the window layout. For example,
409when there are two vertically split windows, CTRL-W K will change that in
410horizontally split windows. CTRL-W H does it the other way around.
411
412 *CTRL-W_K*
413CTRL-W K Move the current window to be at the very top, using the full
414 width of the screen. This works like closing the current
415 window and then creating another one with ":topleft split",
416 except that the current window contents is used for the new
417 window.
418
419 *CTRL-W_J*
420CTRL-W J Move the current window to be at the very bottom, using the
421 full width of the screen. This works like closing the current
422 window and then creating another one with ":botright split",
423 except that the current window contents is used for the new
424 window.
425
426 *CTRL-W_H*
427CTRL-W H Move the current window to be at the far left, using the
428 full height of the screen. This works like closing the
429 current window and then creating another one with
430 ":vert topleft split", except that the current window contents
431 is used for the new window.
432 {not available when compiled without the +vertsplit feature}
433
434 *CTRL-W_L*
435CTRL-W L Move the current window to be at the far right, using the full
436 height of the screen. This works like closing the
437 current window and then creating another one with
438 ":vert botright split", except that the current window
439 contents is used for the new window.
440 {not available when compiled without the +vertsplit feature}
441
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000442 *CTRL-W_T*
443CTRL-W T Move the current window to a new tab page. This fails if
444 there is only one window in the current tab page.
445 When a count is specified the new tab page will be opened
446 before the tab page with this index. Otherwise it comes after
447 the current tab page.
448
Bram Moolenaar071d4272004-06-13 20:20:40 +0000449==============================================================================
4506. Window resizing *window-resize*
451
452 *CTRL-W_=*
453CTRL-W = Make all windows (almost) equally high and wide, but use
454 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000455 Windows with 'winfixheight' set keep their height and windows
456 with 'winfixwidth' set keep their width.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000457
458:res[ize] -N *:res* *:resize* *CTRL-W_-*
459CTRL-W - Decrease current window height by N (default 1).
460 If used after 'vertical': decrease width by N.
461
462:res[ize] +N *CTRL-W_+*
463CTRL-W + Increase current window height by N (default 1).
464 If used after 'vertical': increase width by N.
465
466:res[ize] [N]
467CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
468CTRL-W _ Set current window height to N (default: highest possible).
469
470z{nr}<CR> Set current window height to {nr}.
471
472 *CTRL-W_<*
473CTRL-W < Decrease current window width by N (default 1).
474
475 *CTRL-W_>*
476CTRL-W > Increase current window width by N (default 1).
477
478:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
479CTRL-W | Set current window width to N (default: widest possible).
480
481You can also resize a window by dragging a status line up or down with the
482mouse. Or by dragging a vertical separator line left or right. This only
483works if the version of Vim that is being used supports the mouse and the
484'mouse' option has been set to enable it.
485
486The option 'winheight' ('wh') is used to set the minimal window height of the
487current window. This option is used each time another window becomes the
488current window. If the option is '0', it is disabled. Set 'winheight' to a
489very large value, e.g., '9999', to make the current window always fill all
490available space. Set it to a reasonable value, e.g., '10', to make editing in
491the current window comfortable.
492
493The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
494the current window.
495
496When the option 'equalalways' ('ea') is set, all the windows are automatically
497made the same size after splitting or closing a window. If you don't set this
498option, splitting a window will reduce the size of the current window and
499leave the other windows the same. When closing a window, the extra lines are
500given to the window above it.
501
502The 'eadirection' option limits the direction in which the 'equalalways'
503option is applied. The default "both" resizes in both directions. When the
504value is "ver" only the heights of windows are equalized. Use this when you
505have manually resized a vertically split window and want to keep this width.
506Likewise, "hor" causes only the widths of windows to be equalized.
507
508The option 'cmdheight' ('ch') is used to set the height of the command-line.
509If you are annoyed by the |hit-enter| prompt for long messages, set this
510option to 2 or 3.
511
512If there is only one window, resizing that window will also change the command
513line height. If there are several windows, resizing the current window will
514also change the height of the window below it (and sometimes the window above
515it).
516
517The minimal height and width of a window is set with 'winminheight' and
518'winminwidth'. These are hard values, a window will never become smaller.
519
520==============================================================================
5217. Argument and buffer list commands *buffer-list*
522
523 args list buffer list meaning ~
5241. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
5252. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
5263. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
5274. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
5285. :rewind / :first 15. :brewind / :bfirst to first arg/buf
5296. :last 16. :blast to last arg/buf
5307. :all 17. :ball edit all args/buffers
531 18. :unhide edit all loaded buffers
532 19. :[N]bmod [N] to Nth modified buf
533
534 split & args list split & buffer list meaning ~
53521. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
53622. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
53723. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
53824. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
53925. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
54026. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000054127. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000542 38. :sunhide edit all loaded buffers
543 39. :[N]sbmod [N] split + to Nth modified buf
544
54540. :args list of arguments
54641. :buffers list of buffers
547
548The meaning of [N] depends on the command:
549 [N] is number of buffers to go forward/backward on ?2, ?3, and ?4
550 [N] is an argument number, defaulting to current argument, for 1 and 21
551 [N] is a buffer number, defaulting to current buffer, for 11 and 31
552 [N] is a count for 19 and 39
553
554Note: ":next" is an exception, because it must accept a list of file names
555for compatibility with Vi.
556
557
558The argument list and multiple windows
559--------------------------------------
560
561The current position in the argument list can be different for each window.
562Remember that when doing ":e file", the position in the argument list stays
563the same, but you are not editing the file at that position. To indicate
564this, the file message (and the title, if you have one) shows
565"(file (N) of M)", where "(N)" is the current position in the file list, and
566"M" the number of files in the file list.
567
568All the entries in the argument list are added to the buffer list. Thus, you
569can also get to them with the buffer list commands, like ":bnext".
570
571:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
572:[N]sal[l][!] [N]
573 Rearrange the screen to open one window for each argument.
574 All other windows are closed. When a count is given, this is
575 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000576 With the |:tab| modifier open a tab page for each argument.
577 When there are more arguments than 'tabpagemax' further ones
578 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000579 When the 'hidden' option is set, all buffers in closed windows
580 become hidden.
581 When 'hidden' is not set, and the 'autowrite' option is set,
582 modified buffers are written. Otherwise, windows that have
583 buffers that are modified are not removed, unless the [!] is
584 given, then they become hidden. But modified buffers are
585 never abandoned, so changes cannot get lost.
586 [N] is the maximum number of windows to open. 'winheight'
587 also limits the number of windows opened ('winwidth' if
588 |:vertical| was prepended).
589 Buf/Win Enter/Leave autocommands are not executed for the new
590 windows here, that's only done when they are really entered.
591
592:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
593 Short for ":split | argument [N]": split window and go to Nth
594 argument. But when there is no such argument, the window is
595 not split. Also see |++opt| and |+cmd|.
596
597:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
598 Short for ":split | [N]next": split window and go to Nth next
599 argument. But when there is no next file, the window is not
600 split. Also see |++opt| and |+cmd|.
601
602:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
603:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
604 Short for ":split | [N]Next": split window and go to Nth
605 previous argument. But when there is no previous file, the
606 window is not split. Also see |++opt| and |+cmd|.
607
608 *:sre* *:srewind*
609:sre[wind][!] [++opt] [+cmd]
610 Short for ":split | rewind": split window and go to first
611 argument. But when there is no argument list, the window is
612 not split. Also see |++opt| and |+cmd|.
613
614 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000615:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000616 Same as ":srewind".
617
618 *:sla* *:slast*
619:sla[st][!] [++opt] [+cmd]
620 Short for ":split | last": split window and go to last
621 argument. But when there is no argument list, the window is
622 not split. Also see |++opt| and |+cmd|.
623
624 *:dr* *:drop*
625:dr[op] {file} ..
626 Edit the first {file} in a window.
627 - If the file is already open in a window change to that
628 window.
629 - If the file is not open in a window edit the file in the
630 current window. If the current buffer can't be |abandon|ed,
631 the window is split first.
632 The |argument-list| is set, like with the |:next| command.
633 The purpose of this command is that it can be used from a
634 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000635 When using the |:tab| modifier each argument is opened in a
636 tab page. The last window is used if it's empty.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000637 {only available when compiled with the +gui feature}
638
639==============================================================================
6408. Do a command in all buffers or windows *list-repeat*
641
642 *:windo*
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000643:windo {cmd} Execute {cmd} in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000644 It works like doing this: >
645 CTRL-W t
646 :{cmd}
647 CTRL-W w
648 :{cmd}
649 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000650< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000651 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000652 windows will not be visited.
653 The last window (or where an error occurred) becomes
654 the current window.
655 {cmd} can contain '|' to concatenate several commands.
656 {cmd} must not open or close windows or reorder them.
657 {not in Vi} {not available when compiled without the
658 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000659 Also see |:tabdo|, |:argdo| and |:bufdo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000660
661 *:bufdo*
662:bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list.
663 It works like doing this: >
664 :bfirst
665 :{cmd}
666 :bnext
667 :{cmd}
668 etc.
669< When the current file can't be |abandon|ed and the [!]
670 is not present, the command fails.
671 When an error is detected on one buffer, further
672 buffers will not be visited.
673 Unlisted buffers are skipped.
674 The last buffer (or where an error occurred) becomes
675 the current buffer.
676 {cmd} can contain '|' to concatenate several commands.
677 {cmd} must not delete buffers or add buffers to the
678 buffer list.
679 Note: While this command is executing, the Syntax
680 autocommand event is disabled by adding it to
681 'eventignore'. This considerably speeds up editing
682 each buffer.
683 {not in Vi} {not available when compiled without the
684 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000685 Also see |:tabdo|, |:argdo| and |:windo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000686
687Examples: >
688
689 :windo set nolist nofoldcolumn | normal zn
690
691This resets the 'list' option and disables folding in all windows. >
692
693 :bufdo set fileencoding= | update
694
695This resets the 'fileencoding' in each buffer and writes it if this changed
696the buffer. The result is that all buffers will use the 'encoding' encoding
697(if conversion works properly).
698
699==============================================================================
7009. Tag or file name under the cursor *window-tag*
701
702 *:sta* *:stag*
703:sta[g][!] [tagname]
704 Does ":tag[!] [tagname]" and splits the window for the found
705 tag. See also |:tag|.
706
707CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
708CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
709 tag and jump to it in the new upper window. Make new window N
710 high.
711
712 *CTRL-W_g]*
713CTRL-W g ] Split current window in two. Use identifier under cursor as a
714 tag and perform ":tselect" on it in the new upper window.
715 Make new window N high.
716
717 *CTRL-W_g_CTRL-]*
718CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
719 tag and perform ":tjump" on it in the new upper window. Make
720 new window N high.
721
722CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
723CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000724 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000725 exist.
726 Uses the 'path' variable as a list of directory names where to
727 look for the file. Also the path for current file is
728 used to search for the file name.
729 If the name is a hypertext link that looks like
730 "type://machine/path", only "/path" is used.
731 If a count is given, the count'th matching file is edited.
732 {not available when the |+file_in_path| feature was disabled
733 at compile time}
734
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000735CTRL-W F *CTRL-W_F*
736 Split current window in two. Edit file name under cursor and
737 jump to the line number following the file name. See |gF| for
738 details on how the line number is obtained.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000739 {not available when the |+file_in_path| feature was disabled
740 at compile time}
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000741
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000742CTRL-W gf *CTRL-W_gf*
743 Open a new tab page and edit the file name under the cursor.
744 Like "tab split" and "gf", but the new tab page isn't created
745 if the file does not exist.
746 {not available when the |+file_in_path| feature was disabled
747 at compile time}
748
Bram Moolenaar57657d82006-04-21 22:12:41 +0000749CTRL-W gF *CTRL-W_gF*
750 Open a new tab page and edit the file name under the cursor
751 and jump to the line number following the file name. Like
752 "tab split" and "gF", but the new tab page isn't created if
753 the file does not exist.
754 {not available when the |+file_in_path| feature was disabled
755 at compile time}
756
Bram Moolenaar071d4272004-06-13 20:20:40 +0000757Also see |CTRL-W_CTRL-I|: open window for an included file that includes
758the keyword under the cursor.
759
760==============================================================================
76110. The preview window *preview-window*
762
763The preview window is a special window to show (preview) another file. It is
764normally a small window used to show an include file or definition of a
765function.
766{not available when compiled without the |+quickfix| feature}
767
Bram Moolenaarc270d802006-03-11 21:29:41 +0000768There can be only one preview window (per tab page). It is created with one
769of the commands below. The 'previewheight' option can be set to specify the
770height of the preview window when it's opened. The 'previewwindow' option is
771set in the preview window to be able to recognize it. The 'winfixheight'
772option is set to have it keep the same height when opening/closing other
773windows.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000774
775 *:pta* *:ptag*
776:pta[g][!] [tagname]
777 Does ":tag[!] [tagname]" and shows the found tag in a
778 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000779 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000780 (like a help window is). If a new one is opened,
781 'previewheight' is used for the height of the window. See
782 also |:tag|.
783 See below for an example. |CursorHold-example|
784 Small difference from |:tag|: When [tagname] is equal to the
785 already displayed tag, the position in the matching tag list
786 is not reset. This makes the CursorHold example work after a
787 |:ptnext|.
788
789CTRL-W z *CTRL-W_z*
790CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
791:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
792 option is set, or when the buffer was changed and the [!] is
793 used, the buffer becomes hidden (unless there is another
794 window editing it). The command fails if any "Preview" buffer
795 cannot be closed. See also |:close|.
796
797 *:pp* *:ppop*
798:[count]pp[op][!]
799 Does ":[count]pop[!]" in the preview window. See |:pop| and
800 |:ptag|. {not in Vi}
801
802CTRL-W } *CTRL-W_}*
803 Use identifier under cursor as a tag and perform a :ptag on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000804 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000805 not given, 'previewheight' is used.
806
807CTRL-W g } *CTRL-W_g}*
808 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000809 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000810 not given, 'previewheight' is used.
811
812 *:ped* *:pedit*
813:ped[it][!] [++opt] [+cmd] {file}
814 Edit {file} in the preview window. The preview window is
815 opened like with |:ptag|. The current window and cursor
816 position isn't changed. Useful example: >
817 :pedit +/fputc /usr/include/stdio.h
818<
819 *:ps* *:psearch*
820:[range]ps[earch][!] [count] [/]pattern[/]
821 Works like |:ijump| but shows the found match in the preview
822 window. The preview window is opened like with |:ptag|. The
823 current window and cursor position isn't changed. Useful
824 example: >
825 :psearch popen
826< Like with the |:ptag| command, you can use this to
827 automatically show information about the word under the
828 cursor. This is less clever than using |:ptag|, but you don't
829 need a tags file and it will also find matches in system
830 include files. Example: >
831 :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
832< Warning: This can be slow.
833
834Example *CursorHold-example* >
835
836 :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")
837
838This will cause a ":ptag" to be executed for the keyword under the cursor,
839when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
840makes other autocommands be executed, so that syntax highlighting works in the
841preview window. The "silent!" avoids an error message when the tag could not
842be found. Also see |CursorHold|. To disable this again: >
843
844 :au! CursorHold
845
846A nice addition is to highlight the found tag, avoid the ":ptag" when there
847is no word under the cursor, and a few other things: >
848
849 :au! CursorHold *.[ch] nested call PreviewWord()
850 :func PreviewWord()
851 : if &previewwindow " don't do this in the preview window
852 : return
853 : endif
854 : let w = expand("<cword>") " get the word under cursor
855 : if w =~ '\a' " if the word contains a letter
856 :
857 : " Delete any existing highlight before showing another tag
858 : silent! wincmd P " jump to preview window
859 : if &previewwindow " if we really get there...
860 : match none " delete existing highlight
861 : wincmd p " back to old window
862 : endif
863 :
864 : " Try displaying a matching tag for the word under the cursor
865 : try
866 : exe "ptag " . w
867 : catch
868 : return
869 : endtry
870 :
871 : silent! wincmd P " jump to preview window
872 : if &previewwindow " if we really get there...
873 : if has("folding")
874 : silent! .foldopen " don't want a closed fold
875 : endif
876 : call search("$", "b") " to end of previous line
877 : let w = substitute(w, '\\', '\\\\', "")
878 : call search('\<\V' . w . '\>') " position cursor on match
879 : " Add a match highlight to the word at this position
880 : hi previewWord term=bold ctermbg=green guibg=green
881 : exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
882 : wincmd p " back to old window
883 : endif
884 : endif
885 :endfun
886
887==============================================================================
88811. Using hidden buffers *buffer-hidden*
889
890A hidden buffer is not displayed in a window, but is still loaded into memory.
891This makes it possible to jump from file to file, without the need to read or
892write the file every time you get another buffer in a window.
893{not available when compiled without the |+listcmds| feature}
894
895 *:buffer-!*
896If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
897commands that start editing another file: ":edit", ":next", ":tag", etc. The
898commands that move through the buffer list sometimes make the current buffer
899hidden although the 'hidden' option is not set. This happens when a buffer is
900modified, but is forced (with '!') to be removed from a window, and
901'autowrite' is off or the buffer can't be written.
902
903You can make a hidden buffer not hidden by starting to edit it with any
904command. Or by deleting it with the ":bdelete" command.
905
906The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
907can be used to make an exception for a specific buffer. It can take these
908values:
909 <empty> Use the value of 'hidden'.
910 hide Hide this buffer, also when 'hidden' is not set.
911 unload Don't hide but unload this buffer, also when 'hidden'
912 is set.
913 delete Delete the buffer.
914
915 *hidden-quit*
916When you try to quit Vim while there is a hidden, modified buffer, you will
917get an error message and Vim will make that buffer the current buffer. You
918can then decide to write this buffer (":wq") or quit without writing (":q!").
919Be careful: there may be more hidden, modified buffers!
920
921A buffer can also be unlisted. This means it exists, but it is not in the
922list of buffers. |unlisted-buffer|
923
924
925:files[!] *:files*
926:buffers[!] *:buffers* *:ls*
927:ls[!] Show all buffers. Example:
928
929 1 #h "/test/text" line 1 ~
930 2u "asdf" line 0 ~
Bram Moolenaar81695252004-12-29 20:58:21 +0000931 3 %a+ "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +0000932
933 When the [!] is included the list will show unlisted buffers
934 (the term "unlisted" is a bit confusing then...).
935
936 Each buffer has a unique number. That number will not change,
937 so you can always go to a specific buffer with ":buffer N" or
938 "N CTRL-^", where N is the buffer number.
939
940 Indicators (chars in the same column are mutually exclusive):
941 u an unlisted buffer (only displayed when [!] is used)
942 |unlisted-buffer|
943 % the buffer in the current window
944 # the alternate buffer for ":e #" and CTRL-^
945 a an active buffer: it is loaded and visible
946 h a hidden buffer: It is loaded, but currently not
947 displayed in a window |hidden-buffer|
948 - a buffer with 'modifiable' off
949 = a readonly buffer
950 + a modified buffer
951 x a buffer with read errors
952
953 *:bad* *:badd*
954:bad[d] [+lnum] {fname}
955 Add file name {fname} to the buffer list, without loading it.
956 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000957 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +0000958 commands after the + will be ignored.
959
960:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
961:bd[elete][!] [N]
962 Unload buffer [N] (default: current buffer) and delete it from
963 the buffer list. If the buffer was changed, this fails,
964 unless when [!] is specified, in which case changes are lost.
965 The file remains unaffected. Any windows for this buffer are
966 closed. If buffer [N] is the current buffer, another buffer
967 will be displayed instead. This is the most recent entry in
968 the jump list that points into a loaded buffer.
969 Actually, the buffer isn't completely deleted, it is removed
970 from the buffer list |unlisted-buffer| and option values,
971 variables and mappings/abbreviations for the buffer are
972 cleared.
973
974:bdelete[!] {bufname} *E93* *E94*
975 Like ":bdelete[!] [N]", but buffer given by name. Note that a
976 buffer whose name is a number cannot be referenced by that
977 name; use the buffer number instead. Insert a backslash
978 before a space in a buffer name.
979
980:bdelete[!] N1 N2 ...
981 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
982 buffer numbers or buffer names (but not buffer names that are
983 a number). Insert a backslash before a space in a buffer
984 name.
985
986:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
987 |inclusive|.
988
989:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
990:bw[ipeout][!] {bufname}
991:N,Mbw[ipeout][!]
992:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +0000993 Like |:bdelete|, but really delete the buffer. Everything
994 related to the buffer is lost. All marks in this buffer
995 become invalid, option settings are lost, etc. Don't use this
996 unless you know what you are doing.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000997
998:[N]bun[load][!] *:bun* *:bunload* *E515*
999:bun[load][!] [N]
1000 Unload buffer [N] (default: current buffer). The memory
1001 allocated for this buffer will be freed. The buffer remains
1002 in the buffer list.
1003 If the buffer was changed, this fails, unless when [!] is
1004 specified, in which case the changes are lost.
1005 Any windows for this buffer are closed. If buffer [N] is the
1006 current buffer, another buffer will be displayed instead.
1007 This is the most recent entry in the jump list that points
1008 into a loaded buffer.
1009
1010:bunload[!] {bufname}
1011 Like ":bunload[!] [N]", but buffer given by name. Note that a
1012 buffer whose name is a number cannot be referenced by that
1013 name; use the buffer number instead. Insert a backslash
1014 before a space in a buffer name.
1015
1016:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1017 |inclusive|.
1018
1019:bunload[!] N1 N2 ...
1020 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1021 buffer numbers or buffer names (but not buffer names that are
1022 a number). Insert a backslash before a space in a buffer
1023 name.
1024
1025:[N]b[uffer][!] [N] *:b* *:bu* *:buf* *:buffer* *E86*
1026 Edit buffer [N] from the buffer list. If [N] is not given,
1027 the current buffer remains being edited. See |:buffer-!| for
1028 [!]. This will also edit a buffer that is not in the buffer
1029 list, without setting the 'buflisted' flag.
1030
1031:[N]b[uffer][!] {filename}
1032 Edit buffer for {filename} from the buffer list. See
1033 |:buffer-!| for [!]. This will also edit a buffer that is not
1034 in the buffer list, without setting the 'buflisted' flag.
1035
1036:[N]sb[uffer] [N] *:sb* *:sbuffer*
1037 Split window and edit buffer [N] from the buffer list. If [N]
1038 is not given, the current buffer is edited. Respects the
1039 "useopen" setting of 'switchbuf' when splitting. This will
1040 also edit a buffer that is not in the buffer list, without
1041 setting the 'buflisted' flag.
1042
1043:[N]sb[uffer] {filename}
1044 Split window and edit buffer for {filename} from the buffer
1045 list. This will also edit a buffer that is not in the buffer
1046 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001047 Note: If what you want to do is split the buffer, make a copy
1048 under another name, you can do it this way: >
1049 :w foobar | sp #
Bram Moolenaar071d4272004-06-13 20:20:40 +00001050
Bram Moolenaar280f1262006-01-30 00:14:18 +00001051:[N]bn[ext][!] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001052 Go to [N]th next buffer in buffer list. [N] defaults to one.
1053 Wraps around the end of the buffer list.
1054 See |:buffer-!| for [!].
1055 If you are in a help buffer, this takes you to the next help
1056 buffer (if there is one). Similarly, if you are in a normal
1057 (non-help) buffer, this takes you to the next normal buffer.
1058 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001059 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001060 commands also work like this.
1061
1062 *:sbn* *:sbnext*
1063:[N]sbn[ext] [N]
1064 Split window and go to [N]th next buffer in buffer list.
1065 Wraps around the end of the buffer list. Uses 'switchbuf'
1066
1067:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1068:[N]bp[revious][!] [N]
1069 Go to [N]th previous buffer in buffer list. [N] defaults to
1070 one. Wraps around the start of the buffer list.
1071 See |:buffer-!| for [!] and 'switchbuf'.
1072
1073:[N]sbN[ext] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1074:[N]sbp[revious] [N]
1075 Split window and go to [N]th previous buffer in buffer list.
1076 Wraps around the start of the buffer list.
1077 Uses 'switchbuf'.
1078
1079 *:br* *:brewind*
1080:br[ewind][!] Go to first buffer in buffer list. If the buffer list is
1081 empty, go to the first unlisted buffer.
1082 See |:buffer-!| for [!].
1083
1084 *:bf* *:bfirst*
1085:bf[irst] Same as ":brewind".
1086
1087 *:sbr* *:sbrewind*
1088:sbr[ewind] Split window and go to first buffer in buffer list. If the
1089 buffer list is empty, go to the first unlisted buffer.
1090 Respects the 'switchbuf' option.
1091
1092 *:sbf* *:sbfirst*
1093:sbf[irst] Same as ":sbrewind".
1094
1095 *:bl* *:blast*
1096:bl[ast][!] Go to last buffer in buffer list. If the buffer list is
1097 empty, go to the last unlisted buffer.
1098 See |:buffer-!| for [!].
1099
1100 *:sbl* *:sblast*
1101:sbl[ast] Split window and go to last buffer in buffer list. If the
1102 buffer list is empty, go to the last unlisted buffer.
1103 Respects 'switchbuf' option.
1104
1105:[N]bm[odified][!] [N] *:bm* *:bmodified* *E84*
1106 Go to [N]th next modified buffer. Note: this command also
1107 finds unlisted buffers. If there is no modified buffer the
1108 command fails.
1109
1110:[N]sbm[odified] [N] *:sbm* *:sbmodified*
1111 Split window and go to [N]th next modified buffer.
1112 Respects 'switchbuf' option.
1113 Note: this command also finds buffers not in the buffer list.
1114
1115:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1116:[N]sun[hide] [N]
1117 Rearrange the screen to open one window for each loaded buffer
1118 in the buffer list. When a count is given, this is the
1119 maximum number of windows to open.
1120
1121:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1122:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1123 the buffer list. When a count is given, this is the maximum
1124 number of windows to open. 'winheight' also limits the number
1125 of windows opened ('winwidth' if |:vertical| was prepended).
1126 Buf/Win Enter/Leave autocommands are not executed for the new
1127 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001128 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001129 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001130
1131Note: All the commands above that start editing another buffer, keep the
1132'readonly' flag as it was. This differs from the ":edit" command, which sets
1133the 'readonly' flag each time the file is read.
1134
1135==============================================================================
113612. Special kinds of buffers *special-buffers*
1137
1138Instead of containing the text of a file, buffers can also be used for other
1139purposes. A few options can be set to change the behavior of a buffer:
1140 'bufhidden' what happens when the buffer is no longer displayed
1141 in a window.
1142 'buftype' what kind of a buffer this is
1143 'swapfile' whether the buffer will have a swap file
1144 'buflisted' buffer shows up in the buffer list
1145
1146A few useful kinds of a buffer:
1147
Bram Moolenaar280f1262006-01-30 00:14:18 +00001148quickfix Used to contain the error list or the location list. See
1149 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1150 option to "quickfix". You are not supposed to change this!
1151 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152
1153help Contains a help file. Will only be created with the |:help|
1154 command. The flag that indicates a help buffer is internal
1155 and can't be changed. The 'buflisted' option will be reset
1156 for a help buffer.
1157
Bram Moolenaar677ee682005-01-27 14:41:15 +00001158directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001159 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001160 :setlocal buftype=nowrite
1161 :setlocal bufhidden=delete
1162 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001163< The buffer name is the name of the directory and is adjusted
1164 when using the |:cd| command.
1165
1166scratch Contains text that can be discarded at any time. It is kept
1167 when closing the window, it must be deleted explicitly.
1168 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001169 :setlocal buftype=nofile
1170 :setlocal bufhidden=hide
1171 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001172< The buffer name can be used to identify the buffer.
1173
1174 *unlisted-buffer*
1175unlisted The buffer is not in the buffer list. It is not used for
1176 normal editing, but to show a help file, remember a file name
1177 or marks. The ":bdelete" command will also set this option,
1178 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001179 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001180<
1181
1182 vim:tw=78:ts=8:ft=help:norl: