blob: 4ba28a3c08a355c7c42530ebce7b27ac5b2fa652 [file] [log] [blame]
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +01001*windows.txt* For Vim version 7.4. Last change: 2014 Mar 25
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*
Bram Moolenaar7b449342014-03-25 13:03:48 +0100135:[N]sp[lit] [++opt] [+cmd] [file] *:sp* *:split*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136 Split current window in two. The result is two viewports on
Bram Moolenaar7b449342014-03-25 13:03:48 +0100137 the same file.
138
139 Make the new window N high (default is to use half the height
140 of the current window). Reduces the current window height to
141 create room (and others, if the 'equalalways' option is set,
142 'eadirection' isn't "hor", and one of them is higher than the
143 current or the new window).
144
145 If [file] is given it will be edited in the new window. If it
146 is not loaded in any buffer, it will be read. Else the new
147 window will use the already loaded buffer.
148
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149 Note: CTRL-S does not work on all terminals and might block
150 further input, use CTRL-Q to get going again.
151 Also see |++opt| and |+cmd|.
152
153CTRL-W CTRL-V *CTRL-W_CTRL-V*
154CTRL-W v *CTRL-W_v*
155:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
Bram Moolenaar67f71312007-08-12 14:55:56 +0000156 Like |:split|, but split vertically. The windows will be
157 spread out horizontally if
158 1. a width was not specified,
159 2. 'equalalways' is set,
160 3. 'eadirection' isn't "ver", and
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +0000161 4. one of the other windows is wider than the current or new
Bram Moolenaar67f71312007-08-12 14:55:56 +0000162 window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000163 Note: In other places CTRL-Q does the same as CTRL-V, but here
164 it doesn't!
165
166CTRL-W n *CTRL-W_n*
167CTRL-W CTRL_N *CTRL-W_CTRL-N*
168:[N]new [++opt] [+cmd] *:new*
169 Create a new window and start editing an empty file in it.
170 Make new window N high (default is to use half the existing
171 height). Reduces the current window height to create room (and
172 others, if the 'equalalways' option is set and 'eadirection'
173 isn't "hor").
174 Also see |++opt| and |+cmd|.
175 If 'fileformats' is not empty, the first format given will be
176 used for the new buffer. If 'fileformats' is empty, the
177 'fileformat' of the current buffer is used. This can be
178 overridden with the |++opt| argument.
179 Autocommands are executed in this order:
180 1. WinLeave for the current window
181 2. WinEnter for the new window
182 3. BufLeave for the current buffer
183 4. BufEnter for the new buffer
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200184 This behaves like a ":split" first, and then an ":enew"
185 command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186
187:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
188 Like |:new|, but split vertically. If 'equalalways' is set
189 and 'eadirection' isn't "ver" the windows will be spread out
190 horizontally, unless a width was specified.
191
192:[N]new [++opt] [+cmd] {file}
193:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200194 Create a new window and start editing file {file} in it. This
195 behaves like a ":split" first, and then an ":e" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196 If [+cmd] is given, execute the command when the file has been
197 loaded |+cmd|.
198 Also see |++opt|.
199 Make new window N high (default is to use half the existing
200 height). Reduces the current window height to create room
201 (and others, if the 'equalalways' option is set).
202
203:[N]sv[iew] [++opt] [+cmd] {file} *:sv* *:sview* *splitview*
204 Same as ":split", but set 'readonly' option for this buffer.
205
206:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfind* *splitfind*
Bram Moolenaarc236c162008-07-13 17:41:49 +0000207 Same as ":split", but search for {file} in 'path' like in
208 |:find|. Doesn't split if {file} is not found.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209
210CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
211CTRL-W ^ Does ":split #", split window in two and edit alternate file.
212 When a count is given, it becomes ":split #N", split window
213 and edit buffer N.
214
215Note that the 'splitbelow' and 'splitright' options influence where a new
216window will appear.
217
218 *:vert* *:vertical*
219:vert[ical] {cmd}
220 Execute {cmd}. If it contains a command that splits a window,
221 it will be split vertically.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000222 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000223
224:lefta[bove] {cmd} *:lefta* *:leftabove*
225:abo[veleft] {cmd} *:abo* *:aboveleft*
226 Execute {cmd}. If it contains a command that splits a window,
227 it will be opened left (vertical split) or above (horizontal
228 split) the current window. Overrules 'splitbelow' and
229 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000230 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231
232:rightb[elow] {cmd} *:rightb* *:rightbelow*
233:bel[owright] {cmd} *:bel* *:belowright*
234 Execute {cmd}. If it contains a command that splits a window,
235 it will be opened right (vertical split) or below (horizontal
236 split) the current window. Overrules 'splitbelow' and
237 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000238 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239
240 *:topleft* *E442*
241:to[pleft] {cmd}
242 Execute {cmd}. If it contains a command that splits a window,
243 it will appear at the top and occupy the full width of the Vim
244 window. When the split is vertical the window appears at the
245 far left and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000246 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247
248 *:botright*
249:bo[tright] {cmd}
250 Execute {cmd}. If it contains a command that splits a window,
251 it will appear at the bottom and occupy the full width of the
252 Vim window. When the split is vertical the window appears at
253 the far right and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000254 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255
256These command modifiers can be combined to make a vertically split window
257occupy the full height. Example: >
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200258 :vertical topleft split tags
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259Opens a vertically split, full-height window on the "tags" file at the far
260left of the Vim window.
261
262
263Closing a window
264----------------
265
266CTRL-W q *CTRL-W_q*
267CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
268:q[uit] Quit current window. When quitting the last window (not
269 counting a help window), exit Vim.
270 When 'hidden' is set, and there is only one window for the
271 current buffer, it becomes hidden.
272 When 'hidden' is not set, and there is only one window for the
273 current buffer, and the buffer was changed, the command fails.
274 (Note: CTRL-Q does not work on all terminals)
275
276:q[uit]! Quit current window. If this was the last window for a buffer,
277 any changes to that buffer are lost. When quitting the last
278 window (not counting help windows), exit Vim. The contents of
279 the buffer are lost, even when 'hidden' is set.
280
281CTRL-W c *CTRL-W_c* *:clo* *:close*
282:clo[se][!] Close current window. When the 'hidden' option is set, or
283 when the buffer was changed and the [!] is used, the buffer
284 becomes hidden (unless there is another window editing it).
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000285 When there is only one window in the current tab page and
286 there is another tab page, this closes the current tab page.
287 |tab-page|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288 This command fails when: *E444*
289 - There is only one window on the screen.
290 - When 'hidden' is not set, [!] is not used, the buffer has
291 changes, and there is no other window on this buffer.
292 Changes to the buffer are not written and won't get lost, so
293 this is a "safe" command.
294
295CTRL-W CTRL-C *CTRL-W_CTRL-C*
296 You might have expected that CTRL-W CTRL-C closes the current
297 window, but that does not work, because the CTRL-C cancels the
298 command.
299
300 *:hide*
301:hid[e] Quit current window, unless it is the last window on the
302 screen. The buffer becomes hidden (unless there is another
303 window editing it or 'bufhidden' is "unload" or "delete").
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000304 If the window is the last one in the current tab page the tab
305 page is closed. |tab-page|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000306 The value of 'hidden' is irrelevant for this command.
307 Changes to the buffer are not written and won't get lost, so
308 this is a "safe" command.
309
310:hid[e] {cmd} Execute {cmd} with 'hidden' is set. The previous value of
311 'hidden' is restored after {cmd} has been executed.
312 Example: >
313 :hide edit Makefile
314< This will edit "Makefile", and hide the current buffer if it
315 has any changes.
316
317CTRL-W o *CTRL-W_o* *E445*
318CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
319:on[ly][!] Make the current window the only one on the screen. All other
320 windows are closed.
321 When the 'hidden' option is set, all buffers in closed windows
322 become hidden.
323 When 'hidden' is not set, and the 'autowrite' option is set,
324 modified buffers are written. Otherwise, windows that have
325 buffers that are modified are not removed, unless the [!] is
326 given, then they become hidden. But modified buffers are
327 never abandoned, so changes cannot get lost.
328
329==============================================================================
3304. Moving cursor to other windows *window-move-cursor*
331
332CTRL-W <Down> *CTRL-W_<Down>*
333CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
334CTRL-W j Move cursor to Nth window below current one. Uses the cursor
335 position to select between alternatives.
336
337CTRL-W <Up> *CTRL-W_<Up>*
338CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
339CTRL-W k Move cursor to Nth window above current one. Uses the cursor
340 position to select between alternatives.
341
342CTRL-W <Left> *CTRL-W_<Left>*
343CTRL-W CTRL-H *CTRL-W_CTRL-H*
344CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
345CTRL-W h Move cursor to Nth window left of current one. Uses the
346 cursor position to select between alternatives.
347
348CTRL-W <Right> *CTRL-W_<Right>*
349CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
350CTRL-W l Move cursor to Nth window right of current one. Uses the
351 cursor position to select between alternatives.
352
353CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
354CTRL-W CTRL-W Without count: move cursor to window below/right of the
355 current one. If there is no window below or right, go to
356 top-left window.
357 With count: go to Nth window (windows are numbered from
358 top-left to bottom-right). To obtain the window number see
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100359 |bufwinnr()| and |winnr()|. When N is larger than the number
360 of windows go to the last window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361
362 *CTRL-W_W*
363CTRL-W W Without count: move cursor to window above/left of current
364 one. If there is no window above or left, go to bottom-right
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100365 window. With count: go to Nth window, like with CTRL-W w.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000366
367CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
368CTRL-W CTRL-T Move cursor to top-left window.
369
370CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
371CTRL-W CTRL-B Move cursor to bottom-right window.
372
373CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
374CTRL-W CTRL-P Go to previous (last accessed) window.
375
376 *CTRL-W_P* *E441*
377CTRL-W P Go to preview window. When there is no preview window this is
378 an error.
379 {not available when compiled without the |+quickfix| feature}
380
381If Visual mode is active and the new window is not for the same buffer, the
382Visual mode is ended. If the window is on the same buffer, the cursor
383position is set to keep the same Visual area selected.
384
385 *:winc* *:wincmd*
386These commands can also be executed with ":wincmd":
387
388:[count]winc[md] {arg}
389 Like executing CTRL-W [count] {arg}. Example: >
390 :wincmd j
391< Moves to the window below the current one.
392 This command is useful when a Normal mode cannot be used (for
393 the |CursorHold| autocommand event). Or when a Normal mode
394 command is inconvenient.
395 The count can also be a window number. Example: >
396 :exe nr . "wincmd w"
397< This goes to window "nr".
398
399==============================================================================
4005. Moving windows around *window-moving*
401
402CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
403CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
404 the second one, the second one becomes the third one, etc.
405 The last window becomes the first window. The cursor remains
406 in the same window.
407 This only works within the row or column of windows that the
408 current window is in.
409
410 *CTRL-W_R*
411CTRL-W R Rotate windows upwards/leftwards. The second window becomes
412 the first one, the third one becomes the second one, etc. The
413 first window becomes the last window. The cursor remains in
414 the same window.
415 This only works within the row or column of windows that the
416 current window is in.
417
418CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
419CTRL-W CTRL-X Without count: Exchange current window with next one. If there
420 is no next window, exchange with previous window.
421 With count: Exchange current window with Nth window (first
422 window is 1). The cursor is put in the other window.
423 When vertical and horizontal window splits are mixed, the
424 exchange is only done in the row or column of windows that the
425 current window is in.
426
427The following commands can be used to change the window layout. For example,
428when there are two vertically split windows, CTRL-W K will change that in
429horizontally split windows. CTRL-W H does it the other way around.
430
431 *CTRL-W_K*
432CTRL-W K Move the current window to be at the very top, using the full
433 width of the screen. This works like closing the current
434 window and then creating another one with ":topleft split",
435 except that the current window contents is used for the new
436 window.
437
438 *CTRL-W_J*
439CTRL-W J Move the current window to be at the very bottom, using the
440 full width of the screen. This works like closing the current
441 window and then creating another one with ":botright split",
442 except that the current window contents is used for the new
443 window.
444
445 *CTRL-W_H*
446CTRL-W H Move the current window to be at the far left, using the
447 full height of the screen. This works like closing the
448 current window and then creating another one with
449 ":vert topleft split", except that the current window contents
450 is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200451 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000452
453 *CTRL-W_L*
454CTRL-W L Move the current window to be at the far right, using the full
455 height of the screen. This works like closing the
456 current window and then creating another one with
457 ":vert botright split", except that the current window
458 contents is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200459 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000460
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000461 *CTRL-W_T*
462CTRL-W T Move the current window to a new tab page. This fails if
463 there is only one window in the current tab page.
464 When a count is specified the new tab page will be opened
465 before the tab page with this index. Otherwise it comes after
466 the current tab page.
467
Bram Moolenaar071d4272004-06-13 20:20:40 +0000468==============================================================================
4696. Window resizing *window-resize*
470
471 *CTRL-W_=*
472CTRL-W = Make all windows (almost) equally high and wide, but use
473 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000474 Windows with 'winfixheight' set keep their height and windows
475 with 'winfixwidth' set keep their width.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000476
477:res[ize] -N *:res* *:resize* *CTRL-W_-*
478CTRL-W - Decrease current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200479 If used after |:vertical|: decrease width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000480
481:res[ize] +N *CTRL-W_+*
482CTRL-W + Increase current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200483 If used after |:vertical|: increase width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000484
485:res[ize] [N]
486CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
487CTRL-W _ Set current window height to N (default: highest possible).
488
489z{nr}<CR> Set current window height to {nr}.
490
491 *CTRL-W_<*
492CTRL-W < Decrease current window width by N (default 1).
493
494 *CTRL-W_>*
495CTRL-W > Increase current window width by N (default 1).
496
497:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
498CTRL-W | Set current window width to N (default: widest possible).
499
500You can also resize a window by dragging a status line up or down with the
501mouse. Or by dragging a vertical separator line left or right. This only
502works if the version of Vim that is being used supports the mouse and the
503'mouse' option has been set to enable it.
504
505The option 'winheight' ('wh') is used to set the minimal window height of the
506current window. This option is used each time another window becomes the
507current window. If the option is '0', it is disabled. Set 'winheight' to a
508very large value, e.g., '9999', to make the current window always fill all
509available space. Set it to a reasonable value, e.g., '10', to make editing in
510the current window comfortable.
511
512The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
513the current window.
514
515When the option 'equalalways' ('ea') is set, all the windows are automatically
516made the same size after splitting or closing a window. If you don't set this
517option, splitting a window will reduce the size of the current window and
518leave the other windows the same. When closing a window, the extra lines are
519given to the window above it.
520
521The 'eadirection' option limits the direction in which the 'equalalways'
522option is applied. The default "both" resizes in both directions. When the
523value is "ver" only the heights of windows are equalized. Use this when you
524have manually resized a vertically split window and want to keep this width.
525Likewise, "hor" causes only the widths of windows to be equalized.
526
527The option 'cmdheight' ('ch') is used to set the height of the command-line.
528If you are annoyed by the |hit-enter| prompt for long messages, set this
529option to 2 or 3.
530
531If there is only one window, resizing that window will also change the command
532line height. If there are several windows, resizing the current window will
533also change the height of the window below it (and sometimes the window above
534it).
535
536The minimal height and width of a window is set with 'winminheight' and
537'winminwidth'. These are hard values, a window will never become smaller.
538
539==============================================================================
5407. Argument and buffer list commands *buffer-list*
541
542 args list buffer list meaning ~
5431. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
5442. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
5453. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
5464. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
5475. :rewind / :first 15. :brewind / :bfirst to first arg/buf
5486. :last 16. :blast to last arg/buf
5497. :all 17. :ball edit all args/buffers
550 18. :unhide edit all loaded buffers
551 19. :[N]bmod [N] to Nth modified buf
552
553 split & args list split & buffer list meaning ~
55421. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
55522. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
55623. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
55724. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
55825. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
55926. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000056027. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000561 38. :sunhide edit all loaded buffers
562 39. :[N]sbmod [N] split + to Nth modified buf
563
56440. :args list of arguments
56541. :buffers list of buffers
566
567The meaning of [N] depends on the command:
568 [N] is number of buffers to go forward/backward on ?2, ?3, and ?4
569 [N] is an argument number, defaulting to current argument, for 1 and 21
570 [N] is a buffer number, defaulting to current buffer, for 11 and 31
571 [N] is a count for 19 and 39
572
573Note: ":next" is an exception, because it must accept a list of file names
574for compatibility with Vi.
575
576
577The argument list and multiple windows
578--------------------------------------
579
580The current position in the argument list can be different for each window.
581Remember that when doing ":e file", the position in the argument list stays
582the same, but you are not editing the file at that position. To indicate
583this, the file message (and the title, if you have one) shows
584"(file (N) of M)", where "(N)" is the current position in the file list, and
585"M" the number of files in the file list.
586
587All the entries in the argument list are added to the buffer list. Thus, you
588can also get to them with the buffer list commands, like ":bnext".
589
590:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
591:[N]sal[l][!] [N]
592 Rearrange the screen to open one window for each argument.
593 All other windows are closed. When a count is given, this is
594 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000595 With the |:tab| modifier open a tab page for each argument.
596 When there are more arguments than 'tabpagemax' further ones
597 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000598 When the 'hidden' option is set, all buffers in closed windows
599 become hidden.
600 When 'hidden' is not set, and the 'autowrite' option is set,
601 modified buffers are written. Otherwise, windows that have
602 buffers that are modified are not removed, unless the [!] is
603 given, then they become hidden. But modified buffers are
604 never abandoned, so changes cannot get lost.
605 [N] is the maximum number of windows to open. 'winheight'
606 also limits the number of windows opened ('winwidth' if
607 |:vertical| was prepended).
608 Buf/Win Enter/Leave autocommands are not executed for the new
609 windows here, that's only done when they are really entered.
610
611:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
612 Short for ":split | argument [N]": split window and go to Nth
613 argument. But when there is no such argument, the window is
614 not split. Also see |++opt| and |+cmd|.
615
616:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
617 Short for ":split | [N]next": split window and go to Nth next
618 argument. But when there is no next file, the window is not
619 split. Also see |++opt| and |+cmd|.
620
621:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
622:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
623 Short for ":split | [N]Next": split window and go to Nth
624 previous argument. But when there is no previous file, the
625 window is not split. Also see |++opt| and |+cmd|.
626
627 *:sre* *:srewind*
628:sre[wind][!] [++opt] [+cmd]
629 Short for ":split | rewind": split window and go to first
630 argument. But when there is no argument list, the window is
631 not split. Also see |++opt| and |+cmd|.
632
633 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000634:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000635 Same as ":srewind".
636
637 *:sla* *:slast*
638:sla[st][!] [++opt] [+cmd]
639 Short for ":split | last": split window and go to last
640 argument. But when there is no argument list, the window is
641 not split. Also see |++opt| and |+cmd|.
642
643 *:dr* *:drop*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000644:dr[op] [++opt] [+cmd] {file} ..
Bram Moolenaar071d4272004-06-13 20:20:40 +0000645 Edit the first {file} in a window.
646 - If the file is already open in a window change to that
647 window.
648 - If the file is not open in a window edit the file in the
649 current window. If the current buffer can't be |abandon|ed,
650 the window is split first.
651 The |argument-list| is set, like with the |:next| command.
652 The purpose of this command is that it can be used from a
653 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000654 When using the |:tab| modifier each argument is opened in a
655 tab page. The last window is used if it's empty.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000656 Also see |++opt| and |+cmd|.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200657 {only available when compiled with a GUI}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000658
659==============================================================================
6608. Do a command in all buffers or windows *list-repeat*
661
662 *:windo*
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000663:windo {cmd} Execute {cmd} in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000664 It works like doing this: >
665 CTRL-W t
666 :{cmd}
667 CTRL-W w
668 :{cmd}
669 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000670< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000671 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000672 windows will not be visited.
673 The last window (or where an error occurred) becomes
674 the current window.
675 {cmd} can contain '|' to concatenate several commands.
676 {cmd} must not open or close windows or reorder them.
677 {not in Vi} {not available when compiled without the
678 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000679 Also see |:tabdo|, |:argdo| and |:bufdo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000680
681 *:bufdo*
682:bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list.
683 It works like doing this: >
684 :bfirst
685 :{cmd}
686 :bnext
687 :{cmd}
688 etc.
689< When the current file can't be |abandon|ed and the [!]
690 is not present, the command fails.
691 When an error is detected on one buffer, further
692 buffers will not be visited.
693 Unlisted buffers are skipped.
694 The last buffer (or where an error occurred) becomes
695 the current buffer.
696 {cmd} can contain '|' to concatenate several commands.
697 {cmd} must not delete buffers or add buffers to the
698 buffer list.
699 Note: While this command is executing, the Syntax
700 autocommand event is disabled by adding it to
701 'eventignore'. This considerably speeds up editing
702 each buffer.
703 {not in Vi} {not available when compiled without the
704 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000705 Also see |:tabdo|, |:argdo| and |:windo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000706
707Examples: >
708
709 :windo set nolist nofoldcolumn | normal zn
710
711This resets the 'list' option and disables folding in all windows. >
712
713 :bufdo set fileencoding= | update
714
715This resets the 'fileencoding' in each buffer and writes it if this changed
716the buffer. The result is that all buffers will use the 'encoding' encoding
717(if conversion works properly).
718
719==============================================================================
7209. Tag or file name under the cursor *window-tag*
721
722 *:sta* *:stag*
723:sta[g][!] [tagname]
724 Does ":tag[!] [tagname]" and splits the window for the found
725 tag. See also |:tag|.
726
727CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
728CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
729 tag and jump to it in the new upper window. Make new window N
730 high.
731
732 *CTRL-W_g]*
733CTRL-W g ] Split current window in two. Use identifier under cursor as a
734 tag and perform ":tselect" on it in the new upper window.
735 Make new window N high.
736
737 *CTRL-W_g_CTRL-]*
738CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
739 tag and perform ":tjump" on it in the new upper window. Make
740 new window N high.
741
742CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
743CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000744 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000745 exist.
746 Uses the 'path' variable as a list of directory names where to
747 look for the file. Also the path for current file is
748 used to search for the file name.
749 If the name is a hypertext link that looks like
750 "type://machine/path", only "/path" is used.
751 If a count is given, the count'th matching file is edited.
752 {not available when the |+file_in_path| feature was disabled
753 at compile time}
754
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000755CTRL-W F *CTRL-W_F*
756 Split current window in two. Edit file name under cursor and
757 jump to the line number following the file name. See |gF| for
758 details on how the line number is obtained.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000759 {not available when the |+file_in_path| feature was disabled
760 at compile time}
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000761
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000762CTRL-W gf *CTRL-W_gf*
763 Open a new tab page and edit the file name under the cursor.
764 Like "tab split" and "gf", but the new tab page isn't created
765 if the file does not exist.
766 {not available when the |+file_in_path| feature was disabled
767 at compile time}
768
Bram Moolenaar57657d82006-04-21 22:12:41 +0000769CTRL-W gF *CTRL-W_gF*
770 Open a new tab page and edit the file name under the cursor
771 and jump to the line number following the file name. Like
772 "tab split" and "gF", but the new tab page isn't created if
773 the file does not exist.
774 {not available when the |+file_in_path| feature was disabled
775 at compile time}
776
Bram Moolenaar071d4272004-06-13 20:20:40 +0000777Also see |CTRL-W_CTRL-I|: open window for an included file that includes
778the keyword under the cursor.
779
780==============================================================================
78110. The preview window *preview-window*
782
783The preview window is a special window to show (preview) another file. It is
784normally a small window used to show an include file or definition of a
785function.
786{not available when compiled without the |+quickfix| feature}
787
Bram Moolenaarc270d802006-03-11 21:29:41 +0000788There can be only one preview window (per tab page). It is created with one
789of the commands below. The 'previewheight' option can be set to specify the
790height of the preview window when it's opened. The 'previewwindow' option is
791set in the preview window to be able to recognize it. The 'winfixheight'
792option is set to have it keep the same height when opening/closing other
793windows.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000794
795 *:pta* *:ptag*
796:pta[g][!] [tagname]
797 Does ":tag[!] [tagname]" and shows the found tag in a
798 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000799 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000800 (like a help window is). If a new one is opened,
801 'previewheight' is used for the height of the window. See
802 also |:tag|.
803 See below for an example. |CursorHold-example|
804 Small difference from |:tag|: When [tagname] is equal to the
805 already displayed tag, the position in the matching tag list
806 is not reset. This makes the CursorHold example work after a
807 |:ptnext|.
808
809CTRL-W z *CTRL-W_z*
810CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
811:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
812 option is set, or when the buffer was changed and the [!] is
813 used, the buffer becomes hidden (unless there is another
814 window editing it). The command fails if any "Preview" buffer
815 cannot be closed. See also |:close|.
816
817 *:pp* *:ppop*
818:[count]pp[op][!]
819 Does ":[count]pop[!]" in the preview window. See |:pop| and
820 |:ptag|. {not in Vi}
821
822CTRL-W } *CTRL-W_}*
823 Use identifier under cursor as a tag and perform a :ptag on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000824 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000825 not given, 'previewheight' is used.
826
827CTRL-W g } *CTRL-W_g}*
828 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000829 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000830 not given, 'previewheight' is used.
831
832 *:ped* *:pedit*
833:ped[it][!] [++opt] [+cmd] {file}
834 Edit {file} in the preview window. The preview window is
835 opened like with |:ptag|. The current window and cursor
836 position isn't changed. Useful example: >
837 :pedit +/fputc /usr/include/stdio.h
838<
839 *:ps* *:psearch*
840:[range]ps[earch][!] [count] [/]pattern[/]
841 Works like |:ijump| but shows the found match in the preview
842 window. The preview window is opened like with |:ptag|. The
843 current window and cursor position isn't changed. Useful
844 example: >
845 :psearch popen
846< Like with the |:ptag| command, you can use this to
847 automatically show information about the word under the
848 cursor. This is less clever than using |:ptag|, but you don't
849 need a tags file and it will also find matches in system
850 include files. Example: >
851 :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
852< Warning: This can be slow.
853
854Example *CursorHold-example* >
855
856 :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")
857
858This will cause a ":ptag" to be executed for the keyword under the cursor,
859when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
860makes other autocommands be executed, so that syntax highlighting works in the
861preview window. The "silent!" avoids an error message when the tag could not
862be found. Also see |CursorHold|. To disable this again: >
863
864 :au! CursorHold
865
866A nice addition is to highlight the found tag, avoid the ":ptag" when there
867is no word under the cursor, and a few other things: >
868
869 :au! CursorHold *.[ch] nested call PreviewWord()
870 :func PreviewWord()
871 : if &previewwindow " don't do this in the preview window
872 : return
873 : endif
874 : let w = expand("<cword>") " get the word under cursor
875 : if w =~ '\a' " if the word contains a letter
876 :
877 : " Delete any existing highlight before showing another tag
878 : silent! wincmd P " jump to preview window
879 : if &previewwindow " if we really get there...
880 : match none " delete existing highlight
881 : wincmd p " back to old window
882 : endif
883 :
884 : " Try displaying a matching tag for the word under the cursor
885 : try
886 : exe "ptag " . w
887 : catch
888 : return
889 : endtry
890 :
891 : silent! wincmd P " jump to preview window
892 : if &previewwindow " if we really get there...
893 : if has("folding")
894 : silent! .foldopen " don't want a closed fold
895 : endif
896 : call search("$", "b") " to end of previous line
897 : let w = substitute(w, '\\', '\\\\', "")
898 : call search('\<\V' . w . '\>') " position cursor on match
899 : " Add a match highlight to the word at this position
900 : hi previewWord term=bold ctermbg=green guibg=green
901 : exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
902 : wincmd p " back to old window
903 : endif
904 : endif
905 :endfun
906
907==============================================================================
90811. Using hidden buffers *buffer-hidden*
909
910A hidden buffer is not displayed in a window, but is still loaded into memory.
911This makes it possible to jump from file to file, without the need to read or
912write the file every time you get another buffer in a window.
913{not available when compiled without the |+listcmds| feature}
914
915 *:buffer-!*
916If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
917commands that start editing another file: ":edit", ":next", ":tag", etc. The
918commands that move through the buffer list sometimes make the current buffer
919hidden although the 'hidden' option is not set. This happens when a buffer is
920modified, but is forced (with '!') to be removed from a window, and
921'autowrite' is off or the buffer can't be written.
922
923You can make a hidden buffer not hidden by starting to edit it with any
924command. Or by deleting it with the ":bdelete" command.
925
926The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
927can be used to make an exception for a specific buffer. It can take these
928values:
929 <empty> Use the value of 'hidden'.
930 hide Hide this buffer, also when 'hidden' is not set.
931 unload Don't hide but unload this buffer, also when 'hidden'
932 is set.
933 delete Delete the buffer.
934
935 *hidden-quit*
936When you try to quit Vim while there is a hidden, modified buffer, you will
937get an error message and Vim will make that buffer the current buffer. You
938can then decide to write this buffer (":wq") or quit without writing (":q!").
939Be careful: there may be more hidden, modified buffers!
940
941A buffer can also be unlisted. This means it exists, but it is not in the
942list of buffers. |unlisted-buffer|
943
944
945:files[!] *:files*
946:buffers[!] *:buffers* *:ls*
947:ls[!] Show all buffers. Example:
948
Bram Moolenaar97d62492012-11-15 21:28:22 +0100949 1 #h "/test/text" line 1 ~
950 2u "asdf" line 0 ~
951 3 %a + "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +0000952
953 When the [!] is included the list will show unlisted buffers
954 (the term "unlisted" is a bit confusing then...).
955
956 Each buffer has a unique number. That number will not change,
957 so you can always go to a specific buffer with ":buffer N" or
958 "N CTRL-^", where N is the buffer number.
959
960 Indicators (chars in the same column are mutually exclusive):
961 u an unlisted buffer (only displayed when [!] is used)
962 |unlisted-buffer|
963 % the buffer in the current window
964 # the alternate buffer for ":e #" and CTRL-^
965 a an active buffer: it is loaded and visible
966 h a hidden buffer: It is loaded, but currently not
967 displayed in a window |hidden-buffer|
968 - a buffer with 'modifiable' off
969 = a readonly buffer
970 + a modified buffer
971 x a buffer with read errors
972
973 *:bad* *:badd*
974:bad[d] [+lnum] {fname}
975 Add file name {fname} to the buffer list, without loading it.
976 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000977 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +0000978 commands after the + will be ignored.
979
980:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
981:bd[elete][!] [N]
982 Unload buffer [N] (default: current buffer) and delete it from
983 the buffer list. If the buffer was changed, this fails,
984 unless when [!] is specified, in which case changes are lost.
985 The file remains unaffected. Any windows for this buffer are
986 closed. If buffer [N] is the current buffer, another buffer
987 will be displayed instead. This is the most recent entry in
988 the jump list that points into a loaded buffer.
989 Actually, the buffer isn't completely deleted, it is removed
990 from the buffer list |unlisted-buffer| and option values,
991 variables and mappings/abbreviations for the buffer are
992 cleared.
993
994:bdelete[!] {bufname} *E93* *E94*
995 Like ":bdelete[!] [N]", but buffer given by name. Note that a
996 buffer whose name is a number cannot be referenced by that
997 name; use the buffer number instead. Insert a backslash
998 before a space in a buffer name.
999
1000:bdelete[!] N1 N2 ...
1001 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
1002 buffer numbers or buffer names (but not buffer names that are
1003 a number). Insert a backslash before a space in a buffer
1004 name.
1005
1006:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
1007 |inclusive|.
1008
1009:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
1010:bw[ipeout][!] {bufname}
1011:N,Mbw[ipeout][!]
1012:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00001013 Like |:bdelete|, but really delete the buffer. Everything
1014 related to the buffer is lost. All marks in this buffer
1015 become invalid, option settings are lost, etc. Don't use this
1016 unless you know what you are doing.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001017
1018:[N]bun[load][!] *:bun* *:bunload* *E515*
1019:bun[load][!] [N]
1020 Unload buffer [N] (default: current buffer). The memory
1021 allocated for this buffer will be freed. The buffer remains
1022 in the buffer list.
1023 If the buffer was changed, this fails, unless when [!] is
1024 specified, in which case the changes are lost.
1025 Any windows for this buffer are closed. If buffer [N] is the
1026 current buffer, another buffer will be displayed instead.
1027 This is the most recent entry in the jump list that points
1028 into a loaded buffer.
1029
1030:bunload[!] {bufname}
1031 Like ":bunload[!] [N]", but buffer given by name. Note that a
1032 buffer whose name is a number cannot be referenced by that
1033 name; use the buffer number instead. Insert a backslash
1034 before a space in a buffer name.
1035
1036:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1037 |inclusive|.
1038
1039:bunload[!] N1 N2 ...
1040 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1041 buffer numbers or buffer names (but not buffer names that are
1042 a number). Insert a backslash before a space in a buffer
1043 name.
1044
1045:[N]b[uffer][!] [N] *:b* *:bu* *:buf* *:buffer* *E86*
1046 Edit buffer [N] from the buffer list. If [N] is not given,
1047 the current buffer remains being edited. See |:buffer-!| for
1048 [!]. This will also edit a buffer that is not in the buffer
1049 list, without setting the 'buflisted' flag.
1050
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +00001051:[N]b[uffer][!] {bufname}
1052 Edit buffer for {bufname} from the buffer list. See
Bram Moolenaar071d4272004-06-13 20:20:40 +00001053 |:buffer-!| for [!]. This will also edit a buffer that is not
1054 in the buffer list, without setting the 'buflisted' flag.
1055
1056:[N]sb[uffer] [N] *:sb* *:sbuffer*
1057 Split window and edit buffer [N] from the buffer list. If [N]
1058 is not given, the current buffer is edited. Respects the
1059 "useopen" setting of 'switchbuf' when splitting. This will
1060 also edit a buffer that is not in the buffer list, without
1061 setting the 'buflisted' flag.
1062
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +00001063:[N]sb[uffer] {bufname}
1064 Split window and edit buffer for {bufname} from the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001065 list. This will also edit a buffer that is not in the buffer
1066 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001067 Note: If what you want to do is split the buffer, make a copy
1068 under another name, you can do it this way: >
1069 :w foobar | sp #
Bram Moolenaar071d4272004-06-13 20:20:40 +00001070
Bram Moolenaar280f1262006-01-30 00:14:18 +00001071:[N]bn[ext][!] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001072 Go to [N]th next buffer in buffer list. [N] defaults to one.
1073 Wraps around the end of the buffer list.
1074 See |:buffer-!| for [!].
1075 If you are in a help buffer, this takes you to the next help
1076 buffer (if there is one). Similarly, if you are in a normal
1077 (non-help) buffer, this takes you to the next normal buffer.
1078 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001079 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001080 commands also work like this.
1081
1082 *:sbn* *:sbnext*
1083:[N]sbn[ext] [N]
1084 Split window and go to [N]th next buffer in buffer list.
1085 Wraps around the end of the buffer list. Uses 'switchbuf'
1086
1087:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1088:[N]bp[revious][!] [N]
1089 Go to [N]th previous buffer in buffer list. [N] defaults to
1090 one. Wraps around the start of the buffer list.
1091 See |:buffer-!| for [!] and 'switchbuf'.
1092
1093:[N]sbN[ext] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1094:[N]sbp[revious] [N]
1095 Split window and go to [N]th previous buffer in buffer list.
1096 Wraps around the start of the buffer list.
1097 Uses 'switchbuf'.
1098
1099 *:br* *:brewind*
1100:br[ewind][!] Go to first buffer in buffer list. If the buffer list is
1101 empty, go to the first unlisted buffer.
1102 See |:buffer-!| for [!].
1103
1104 *:bf* *:bfirst*
1105:bf[irst] Same as ":brewind".
1106
1107 *:sbr* *:sbrewind*
1108:sbr[ewind] Split window and go to first buffer in buffer list. If the
1109 buffer list is empty, go to the first unlisted buffer.
1110 Respects the 'switchbuf' option.
1111
1112 *:sbf* *:sbfirst*
1113:sbf[irst] Same as ":sbrewind".
1114
1115 *:bl* *:blast*
1116:bl[ast][!] Go to last buffer in buffer list. If the buffer list is
1117 empty, go to the last unlisted buffer.
1118 See |:buffer-!| for [!].
1119
1120 *:sbl* *:sblast*
1121:sbl[ast] Split window and go to last buffer in buffer list. If the
1122 buffer list is empty, go to the last unlisted buffer.
1123 Respects 'switchbuf' option.
1124
1125:[N]bm[odified][!] [N] *:bm* *:bmodified* *E84*
1126 Go to [N]th next modified buffer. Note: this command also
1127 finds unlisted buffers. If there is no modified buffer the
1128 command fails.
1129
1130:[N]sbm[odified] [N] *:sbm* *:sbmodified*
1131 Split window and go to [N]th next modified buffer.
1132 Respects 'switchbuf' option.
1133 Note: this command also finds buffers not in the buffer list.
1134
1135:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1136:[N]sun[hide] [N]
1137 Rearrange the screen to open one window for each loaded buffer
1138 in the buffer list. When a count is given, this is the
1139 maximum number of windows to open.
1140
1141:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1142:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1143 the buffer list. When a count is given, this is the maximum
1144 number of windows to open. 'winheight' also limits the number
1145 of windows opened ('winwidth' if |:vertical| was prepended).
1146 Buf/Win Enter/Leave autocommands are not executed for the new
1147 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001148 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001149 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001150
1151Note: All the commands above that start editing another buffer, keep the
1152'readonly' flag as it was. This differs from the ":edit" command, which sets
1153the 'readonly' flag each time the file is read.
1154
1155==============================================================================
115612. Special kinds of buffers *special-buffers*
1157
1158Instead of containing the text of a file, buffers can also be used for other
1159purposes. A few options can be set to change the behavior of a buffer:
1160 'bufhidden' what happens when the buffer is no longer displayed
1161 in a window.
1162 'buftype' what kind of a buffer this is
1163 'swapfile' whether the buffer will have a swap file
1164 'buflisted' buffer shows up in the buffer list
1165
1166A few useful kinds of a buffer:
1167
Bram Moolenaar280f1262006-01-30 00:14:18 +00001168quickfix Used to contain the error list or the location list. See
1169 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1170 option to "quickfix". You are not supposed to change this!
1171 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001172
1173help Contains a help file. Will only be created with the |:help|
1174 command. The flag that indicates a help buffer is internal
1175 and can't be changed. The 'buflisted' option will be reset
1176 for a help buffer.
1177
Bram Moolenaar677ee682005-01-27 14:41:15 +00001178directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001179 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001180 :setlocal buftype=nowrite
1181 :setlocal bufhidden=delete
1182 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001183< The buffer name is the name of the directory and is adjusted
1184 when using the |:cd| command.
1185
1186scratch Contains text that can be discarded at any time. It is kept
1187 when closing the window, it must be deleted explicitly.
1188 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001189 :setlocal buftype=nofile
1190 :setlocal bufhidden=hide
1191 :setlocal noswapfile
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001192< The buffer name can be used to identify the buffer, if you
1193 give it a meaningful name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001194
1195 *unlisted-buffer*
1196unlisted The buffer is not in the buffer list. It is not used for
1197 normal editing, but to show a help file, remember a file name
1198 or marks. The ":bdelete" command will also set this option,
1199 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001200 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001201<
1202
1203 vim:tw=78:ts=8:ft=help:norl: