blob: a7db69c52014ff6ed8ffe245687a05e64b6cc62e [file] [log] [blame]
Bram Moolenaarf9132812015-07-21 19:19:13 +02001*windows.txt* For Vim version 7.4. Last change: 2015 Jul 21
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
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100266:q[uit]
267:{count}q[uit]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268CTRL-W q *CTRL-W_q*
269CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100270 Without {count}: Quit the current window. If {count} is
271 given quit the {count} window.
272
273 When quitting the last window (not counting a help window),
274 exit Vim.
275
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276 When 'hidden' is set, and there is only one window for the
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100277 current buffer, it becomes hidden. When 'hidden' is not set,
278 and there is only one window for the current buffer, and the
279 buffer was changed, the command fails.
280
Bram Moolenaared32d942014-12-06 23:33:00 +0100281 (Note: CTRL-Q does not work on all terminals).
282
283 If [count] is greater than the last window number the last
284 window will be closed: >
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100285 :1quit " quit the first window
286 :$quit " quit the last window
287 :9quit " quit the last window
288 " if there are less than 9 windows opened
289 :-quit " quit the previews window
290 :+quit " quit the next window
Bram Moolenaared32d942014-12-06 23:33:00 +0100291 :+2quit " quit the second next window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100292<
293:q[uit]!
294:{count}q[uit]!
295 Without {count}: Quit the current window. If {count} is
296 given quit the {count} window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000297
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100298 If this was the last window for a buffer, any changes to that
299 buffer are lost. When quitting the last window (not counting
300 help windows), exit Vim. The contents of the buffer are lost,
301 even when 'hidden' is set.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000302
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100303:clo[se][!]
304:{count}clo[se][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305CTRL-W c *CTRL-W_c* *:clo* *:close*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100306 Without {count}: Close the current window. If {count} is
307 given close the {count} window.
308
309 When the 'hidden' option is set, or when the buffer was
310 changed and the [!] is used, the buffer becomes hidden (unless
311 there is another window editing it).
312
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000313 When there is only one window in the current tab page and
314 there is another tab page, this closes the current tab page.
315 |tab-page|.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100316
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317 This command fails when: *E444*
318 - There is only one window on the screen.
319 - When 'hidden' is not set, [!] is not used, the buffer has
320 changes, and there is no other window on this buffer.
321 Changes to the buffer are not written and won't get lost, so
322 this is a "safe" command.
323
324CTRL-W CTRL-C *CTRL-W_CTRL-C*
325 You might have expected that CTRL-W CTRL-C closes the current
326 window, but that does not work, because the CTRL-C cancels the
327 command.
328
329 *:hide*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100330:hid[e]
331:{count}hid[e]
332 Quit the current window, unless it is the last window on the
333 screen. For {count} see |:quit| command.
334
335 The buffer becomes hidden (unless there is another window
Bram Moolenaared32d942014-12-06 23:33:00 +0100336 editing it or 'bufhidden' is "unload", "delete" or "wipe").
337 If the window is the last one in the current tab page the tab
338 page is closed. |tab-page|
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100339
340 The value of 'hidden' is irrelevant for this command. Changes
341 to the buffer are not written and won't get lost, so this is a
342 "safe" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000343
344:hid[e] {cmd} Execute {cmd} with 'hidden' is set. The previous value of
345 'hidden' is restored after {cmd} has been executed.
346 Example: >
347 :hide edit Makefile
348< This will edit "Makefile", and hide the current buffer if it
349 has any changes.
350
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100351:on[ly][!]
352:{count}on[ly][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353CTRL-W o *CTRL-W_o* *E445*
354CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100355 Make the current window the only one on the screen. All other
356 windows are closed. For {count} see |:quit| command.
357
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358 When the 'hidden' option is set, all buffers in closed windows
359 become hidden.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100360
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361 When 'hidden' is not set, and the 'autowrite' option is set,
362 modified buffers are written. Otherwise, windows that have
363 buffers that are modified are not removed, unless the [!] is
364 given, then they become hidden. But modified buffers are
365 never abandoned, so changes cannot get lost.
366
367==============================================================================
3684. Moving cursor to other windows *window-move-cursor*
369
370CTRL-W <Down> *CTRL-W_<Down>*
371CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
372CTRL-W j Move cursor to Nth window below current one. Uses the cursor
373 position to select between alternatives.
374
375CTRL-W <Up> *CTRL-W_<Up>*
376CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
377CTRL-W k Move cursor to Nth window above current one. Uses the cursor
378 position to select between alternatives.
379
380CTRL-W <Left> *CTRL-W_<Left>*
381CTRL-W CTRL-H *CTRL-W_CTRL-H*
382CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
383CTRL-W h Move cursor to Nth window left of current one. Uses the
384 cursor position to select between alternatives.
385
386CTRL-W <Right> *CTRL-W_<Right>*
387CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
388CTRL-W l Move cursor to Nth window right of current one. Uses the
389 cursor position to select between alternatives.
390
391CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
392CTRL-W CTRL-W Without count: move cursor to window below/right of the
393 current one. If there is no window below or right, go to
394 top-left window.
395 With count: go to Nth window (windows are numbered from
396 top-left to bottom-right). To obtain the window number see
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100397 |bufwinnr()| and |winnr()|. When N is larger than the number
398 of windows go to the last window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399
400 *CTRL-W_W*
401CTRL-W W Without count: move cursor to window above/left of current
402 one. If there is no window above or left, go to bottom-right
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100403 window. With count: go to Nth window, like with CTRL-W w.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404
405CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
406CTRL-W CTRL-T Move cursor to top-left window.
407
408CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
409CTRL-W CTRL-B Move cursor to bottom-right window.
410
411CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
412CTRL-W CTRL-P Go to previous (last accessed) window.
413
414 *CTRL-W_P* *E441*
415CTRL-W P Go to preview window. When there is no preview window this is
416 an error.
417 {not available when compiled without the |+quickfix| feature}
418
419If Visual mode is active and the new window is not for the same buffer, the
420Visual mode is ended. If the window is on the same buffer, the cursor
421position is set to keep the same Visual area selected.
422
423 *:winc* *:wincmd*
424These commands can also be executed with ":wincmd":
425
426:[count]winc[md] {arg}
427 Like executing CTRL-W [count] {arg}. Example: >
428 :wincmd j
429< Moves to the window below the current one.
430 This command is useful when a Normal mode cannot be used (for
431 the |CursorHold| autocommand event). Or when a Normal mode
432 command is inconvenient.
433 The count can also be a window number. Example: >
434 :exe nr . "wincmd w"
435< This goes to window "nr".
436
437==============================================================================
4385. Moving windows around *window-moving*
439
440CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
441CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
442 the second one, the second one becomes the third one, etc.
443 The last window becomes the first window. The cursor remains
444 in the same window.
445 This only works within the row or column of windows that the
446 current window is in.
447
448 *CTRL-W_R*
449CTRL-W R Rotate windows upwards/leftwards. The second window becomes
450 the first one, the third one becomes the second one, etc. The
451 first window becomes the last window. The cursor remains in
452 the same window.
453 This only works within the row or column of windows that the
454 current window is in.
455
456CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
457CTRL-W CTRL-X Without count: Exchange current window with next one. If there
458 is no next window, exchange with previous window.
459 With count: Exchange current window with Nth window (first
460 window is 1). The cursor is put in the other window.
461 When vertical and horizontal window splits are mixed, the
462 exchange is only done in the row or column of windows that the
463 current window is in.
464
465The following commands can be used to change the window layout. For example,
466when there are two vertically split windows, CTRL-W K will change that in
467horizontally split windows. CTRL-W H does it the other way around.
468
469 *CTRL-W_K*
470CTRL-W K Move the current window to be at the very top, using the full
471 width of the screen. This works like closing the current
472 window and then creating another one with ":topleft split",
473 except that the current window contents is used for the new
474 window.
475
476 *CTRL-W_J*
477CTRL-W J Move the current window to be at the very bottom, using the
478 full width of the screen. This works like closing the current
479 window and then creating another one with ":botright split",
480 except that the current window contents is used for the new
481 window.
482
483 *CTRL-W_H*
484CTRL-W H Move the current window to be at the far left, using the
485 full height of the screen. This works like closing the
486 current window and then creating another one with
487 ":vert topleft split", except that the current window contents
488 is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200489 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490
491 *CTRL-W_L*
492CTRL-W L Move the current window to be at the far right, using the full
493 height of the screen. This works like closing the
494 current window and then creating another one with
495 ":vert botright split", except that the current window
496 contents is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200497 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000498
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000499 *CTRL-W_T*
500CTRL-W T Move the current window to a new tab page. This fails if
501 there is only one window in the current tab page.
502 When a count is specified the new tab page will be opened
503 before the tab page with this index. Otherwise it comes after
504 the current tab page.
505
Bram Moolenaar071d4272004-06-13 20:20:40 +0000506==============================================================================
5076. Window resizing *window-resize*
508
509 *CTRL-W_=*
510CTRL-W = Make all windows (almost) equally high and wide, but use
511 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000512 Windows with 'winfixheight' set keep their height and windows
513 with 'winfixwidth' set keep their width.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000514
515:res[ize] -N *:res* *:resize* *CTRL-W_-*
516CTRL-W - Decrease current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200517 If used after |:vertical|: decrease width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000518
519:res[ize] +N *CTRL-W_+*
520CTRL-W + Increase current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200521 If used after |:vertical|: increase width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000522
523:res[ize] [N]
524CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
525CTRL-W _ Set current window height to N (default: highest possible).
526
527z{nr}<CR> Set current window height to {nr}.
528
529 *CTRL-W_<*
530CTRL-W < Decrease current window width by N (default 1).
531
532 *CTRL-W_>*
533CTRL-W > Increase current window width by N (default 1).
534
535:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
536CTRL-W | Set current window width to N (default: widest possible).
537
538You can also resize a window by dragging a status line up or down with the
539mouse. Or by dragging a vertical separator line left or right. This only
540works if the version of Vim that is being used supports the mouse and the
541'mouse' option has been set to enable it.
542
543The option 'winheight' ('wh') is used to set the minimal window height of the
544current window. This option is used each time another window becomes the
545current window. If the option is '0', it is disabled. Set 'winheight' to a
546very large value, e.g., '9999', to make the current window always fill all
547available space. Set it to a reasonable value, e.g., '10', to make editing in
548the current window comfortable.
549
550The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
551the current window.
552
553When the option 'equalalways' ('ea') is set, all the windows are automatically
554made the same size after splitting or closing a window. If you don't set this
555option, splitting a window will reduce the size of the current window and
556leave the other windows the same. When closing a window, the extra lines are
557given to the window above it.
558
559The 'eadirection' option limits the direction in which the 'equalalways'
560option is applied. The default "both" resizes in both directions. When the
561value is "ver" only the heights of windows are equalized. Use this when you
562have manually resized a vertically split window and want to keep this width.
563Likewise, "hor" causes only the widths of windows to be equalized.
564
565The option 'cmdheight' ('ch') is used to set the height of the command-line.
566If you are annoyed by the |hit-enter| prompt for long messages, set this
567option to 2 or 3.
568
569If there is only one window, resizing that window will also change the command
570line height. If there are several windows, resizing the current window will
571also change the height of the window below it (and sometimes the window above
572it).
573
574The minimal height and width of a window is set with 'winminheight' and
575'winminwidth'. These are hard values, a window will never become smaller.
576
577==============================================================================
5787. Argument and buffer list commands *buffer-list*
579
580 args list buffer list meaning ~
5811. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
5822. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
5833. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
5844. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
5855. :rewind / :first 15. :brewind / :bfirst to first arg/buf
5866. :last 16. :blast to last arg/buf
5877. :all 17. :ball edit all args/buffers
588 18. :unhide edit all loaded buffers
589 19. :[N]bmod [N] to Nth modified buf
590
591 split & args list split & buffer list meaning ~
59221. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
59322. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
59423. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
59524. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
59625. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
59726. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000059827. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000599 38. :sunhide edit all loaded buffers
600 39. :[N]sbmod [N] split + to Nth modified buf
601
60240. :args list of arguments
60341. :buffers list of buffers
604
605The meaning of [N] depends on the command:
606 [N] is number of buffers to go forward/backward on ?2, ?3, and ?4
607 [N] is an argument number, defaulting to current argument, for 1 and 21
608 [N] is a buffer number, defaulting to current buffer, for 11 and 31
609 [N] is a count for 19 and 39
610
611Note: ":next" is an exception, because it must accept a list of file names
612for compatibility with Vi.
613
614
615The argument list and multiple windows
616--------------------------------------
617
618The current position in the argument list can be different for each window.
619Remember that when doing ":e file", the position in the argument list stays
620the same, but you are not editing the file at that position. To indicate
621this, the file message (and the title, if you have one) shows
622"(file (N) of M)", where "(N)" is the current position in the file list, and
623"M" the number of files in the file list.
624
625All the entries in the argument list are added to the buffer list. Thus, you
626can also get to them with the buffer list commands, like ":bnext".
627
628:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
629:[N]sal[l][!] [N]
630 Rearrange the screen to open one window for each argument.
631 All other windows are closed. When a count is given, this is
632 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000633 With the |:tab| modifier open a tab page for each argument.
634 When there are more arguments than 'tabpagemax' further ones
635 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000636 When the 'hidden' option is set, all buffers in closed windows
637 become hidden.
638 When 'hidden' is not set, and the 'autowrite' option is set,
639 modified buffers are written. Otherwise, windows that have
640 buffers that are modified are not removed, unless the [!] is
641 given, then they become hidden. But modified buffers are
642 never abandoned, so changes cannot get lost.
643 [N] is the maximum number of windows to open. 'winheight'
644 also limits the number of windows opened ('winwidth' if
645 |:vertical| was prepended).
646 Buf/Win Enter/Leave autocommands are not executed for the new
647 windows here, that's only done when they are really entered.
648
649:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
650 Short for ":split | argument [N]": split window and go to Nth
651 argument. But when there is no such argument, the window is
652 not split. Also see |++opt| and |+cmd|.
653
654:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
655 Short for ":split | [N]next": split window and go to Nth next
656 argument. But when there is no next file, the window is not
657 split. Also see |++opt| and |+cmd|.
658
659:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
660:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
661 Short for ":split | [N]Next": split window and go to Nth
662 previous argument. But when there is no previous file, the
663 window is not split. Also see |++opt| and |+cmd|.
664
665 *:sre* *:srewind*
666:sre[wind][!] [++opt] [+cmd]
667 Short for ":split | rewind": split window and go to first
668 argument. But when there is no argument list, the window is
669 not split. Also see |++opt| and |+cmd|.
670
671 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000672:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000673 Same as ":srewind".
674
675 *:sla* *:slast*
676:sla[st][!] [++opt] [+cmd]
677 Short for ":split | last": split window and go to last
678 argument. But when there is no argument list, the window is
679 not split. Also see |++opt| and |+cmd|.
680
681 *:dr* *:drop*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000682:dr[op] [++opt] [+cmd] {file} ..
Bram Moolenaar071d4272004-06-13 20:20:40 +0000683 Edit the first {file} in a window.
684 - If the file is already open in a window change to that
685 window.
686 - If the file is not open in a window edit the file in the
687 current window. If the current buffer can't be |abandon|ed,
688 the window is split first.
689 The |argument-list| is set, like with the |:next| command.
690 The purpose of this command is that it can be used from a
691 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000692 When using the |:tab| modifier each argument is opened in a
693 tab page. The last window is used if it's empty.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000694 Also see |++opt| and |+cmd|.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200695 {only available when compiled with a GUI}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000696
697==============================================================================
6988. Do a command in all buffers or windows *list-repeat*
699
700 *:windo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100701:[range]windo {cmd} Execute {cmd} in each window or if [range] is given
702 only in windows for which the window number lies in
703 the [range]. It works like doing this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000704 CTRL-W t
705 :{cmd}
706 CTRL-W w
707 :{cmd}
708 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000709< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000710 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000711 windows will not be visited.
712 The last window (or where an error occurred) becomes
713 the current window.
714 {cmd} can contain '|' to concatenate several commands.
715 {cmd} must not open or close windows or reorder them.
716 {not in Vi} {not available when compiled without the
717 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000718 Also see |:tabdo|, |:argdo| and |:bufdo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000719
720 *:bufdo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100721:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
722 [range] is given only for buffers for which their
723 buffer numer is in the [range]. It works like doing
724 this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000725 :bfirst
726 :{cmd}
727 :bnext
728 :{cmd}
729 etc.
730< When the current file can't be |abandon|ed and the [!]
731 is not present, the command fails.
732 When an error is detected on one buffer, further
733 buffers will not be visited.
734 Unlisted buffers are skipped.
735 The last buffer (or where an error occurred) becomes
736 the current buffer.
737 {cmd} can contain '|' to concatenate several commands.
738 {cmd} must not delete buffers or add buffers to the
739 buffer list.
740 Note: While this command is executing, the Syntax
741 autocommand event is disabled by adding it to
742 'eventignore'. This considerably speeds up editing
743 each buffer.
744 {not in Vi} {not available when compiled without the
745 |+listcmds| feature}
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000746 Also see |:tabdo|, |:argdo| and |:windo|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000747
748Examples: >
749
750 :windo set nolist nofoldcolumn | normal zn
751
752This resets the 'list' option and disables folding in all windows. >
753
754 :bufdo set fileencoding= | update
755
756This resets the 'fileencoding' in each buffer and writes it if this changed
757the buffer. The result is that all buffers will use the 'encoding' encoding
758(if conversion works properly).
759
760==============================================================================
7619. Tag or file name under the cursor *window-tag*
762
763 *:sta* *:stag*
764:sta[g][!] [tagname]
765 Does ":tag[!] [tagname]" and splits the window for the found
766 tag. See also |:tag|.
767
768CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
769CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200770 tag and jump to it in the new upper window.
771 In Visual mode uses the Visually selected text as a tag.
772 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000773
774 *CTRL-W_g]*
775CTRL-W g ] Split current window in two. Use identifier under cursor as a
776 tag and perform ":tselect" on it in the new upper window.
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200777 In Visual mode uses the Visually selected text as a tag.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000778 Make new window N high.
779
780 *CTRL-W_g_CTRL-]*
781CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200782 tag and perform ":tjump" on it in the new upper window.
783 In Visual mode uses the Visually selected text as a tag.
784 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000785
786CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
787CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000788 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000789 exist.
790 Uses the 'path' variable as a list of directory names where to
791 look for the file. Also the path for current file is
792 used to search for the file name.
793 If the name is a hypertext link that looks like
794 "type://machine/path", only "/path" is used.
795 If a count is given, the count'th matching file is edited.
796 {not available when the |+file_in_path| feature was disabled
797 at compile time}
798
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000799CTRL-W F *CTRL-W_F*
800 Split current window in two. Edit file name under cursor and
801 jump to the line number following the file name. See |gF| for
802 details on how the line number is obtained.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000803 {not available when the |+file_in_path| feature was disabled
804 at compile time}
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000805
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000806CTRL-W gf *CTRL-W_gf*
807 Open a new tab page and edit the file name under the cursor.
808 Like "tab split" and "gf", but the new tab page isn't created
809 if the file does not exist.
810 {not available when the |+file_in_path| feature was disabled
811 at compile time}
812
Bram Moolenaar57657d82006-04-21 22:12:41 +0000813CTRL-W gF *CTRL-W_gF*
814 Open a new tab page and edit the file name under the cursor
815 and jump to the line number following the file name. Like
816 "tab split" and "gF", but the new tab page isn't created if
817 the file does not exist.
818 {not available when the |+file_in_path| feature was disabled
819 at compile time}
820
Bram Moolenaar071d4272004-06-13 20:20:40 +0000821Also see |CTRL-W_CTRL-I|: open window for an included file that includes
822the keyword under the cursor.
823
824==============================================================================
82510. The preview window *preview-window*
826
827The preview window is a special window to show (preview) another file. It is
828normally a small window used to show an include file or definition of a
829function.
830{not available when compiled without the |+quickfix| feature}
831
Bram Moolenaarc270d802006-03-11 21:29:41 +0000832There can be only one preview window (per tab page). It is created with one
833of the commands below. The 'previewheight' option can be set to specify the
834height of the preview window when it's opened. The 'previewwindow' option is
835set in the preview window to be able to recognize it. The 'winfixheight'
836option is set to have it keep the same height when opening/closing other
837windows.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000838
839 *:pta* *:ptag*
840:pta[g][!] [tagname]
841 Does ":tag[!] [tagname]" and shows the found tag in a
842 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000843 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000844 (like a help window is). If a new one is opened,
845 'previewheight' is used for the height of the window. See
846 also |:tag|.
847 See below for an example. |CursorHold-example|
848 Small difference from |:tag|: When [tagname] is equal to the
849 already displayed tag, the position in the matching tag list
850 is not reset. This makes the CursorHold example work after a
851 |:ptnext|.
852
853CTRL-W z *CTRL-W_z*
854CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
855:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
856 option is set, or when the buffer was changed and the [!] is
857 used, the buffer becomes hidden (unless there is another
858 window editing it). The command fails if any "Preview" buffer
859 cannot be closed. See also |:close|.
860
861 *:pp* *:ppop*
862:[count]pp[op][!]
863 Does ":[count]pop[!]" in the preview window. See |:pop| and
864 |:ptag|. {not in Vi}
865
866CTRL-W } *CTRL-W_}*
867 Use identifier under cursor as a tag and perform a :ptag on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000868 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000869 not given, 'previewheight' is used.
870
871CTRL-W g } *CTRL-W_g}*
872 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000873 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000874 not given, 'previewheight' is used.
875
876 *:ped* *:pedit*
877:ped[it][!] [++opt] [+cmd] {file}
878 Edit {file} in the preview window. The preview window is
879 opened like with |:ptag|. The current window and cursor
880 position isn't changed. Useful example: >
881 :pedit +/fputc /usr/include/stdio.h
882<
883 *:ps* *:psearch*
884:[range]ps[earch][!] [count] [/]pattern[/]
885 Works like |:ijump| but shows the found match in the preview
886 window. The preview window is opened like with |:ptag|. The
887 current window and cursor position isn't changed. Useful
888 example: >
889 :psearch popen
890< Like with the |:ptag| command, you can use this to
891 automatically show information about the word under the
892 cursor. This is less clever than using |:ptag|, but you don't
893 need a tags file and it will also find matches in system
894 include files. Example: >
895 :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
896< Warning: This can be slow.
897
898Example *CursorHold-example* >
899
900 :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")
901
902This will cause a ":ptag" to be executed for the keyword under the cursor,
903when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
904makes other autocommands be executed, so that syntax highlighting works in the
905preview window. The "silent!" avoids an error message when the tag could not
906be found. Also see |CursorHold|. To disable this again: >
907
908 :au! CursorHold
909
910A nice addition is to highlight the found tag, avoid the ":ptag" when there
911is no word under the cursor, and a few other things: >
912
913 :au! CursorHold *.[ch] nested call PreviewWord()
914 :func PreviewWord()
915 : if &previewwindow " don't do this in the preview window
916 : return
917 : endif
918 : let w = expand("<cword>") " get the word under cursor
919 : if w =~ '\a' " if the word contains a letter
920 :
921 : " Delete any existing highlight before showing another tag
922 : silent! wincmd P " jump to preview window
923 : if &previewwindow " if we really get there...
924 : match none " delete existing highlight
925 : wincmd p " back to old window
926 : endif
927 :
928 : " Try displaying a matching tag for the word under the cursor
929 : try
930 : exe "ptag " . w
931 : catch
932 : return
933 : endtry
934 :
935 : silent! wincmd P " jump to preview window
936 : if &previewwindow " if we really get there...
937 : if has("folding")
938 : silent! .foldopen " don't want a closed fold
939 : endif
940 : call search("$", "b") " to end of previous line
941 : let w = substitute(w, '\\', '\\\\', "")
942 : call search('\<\V' . w . '\>') " position cursor on match
943 : " Add a match highlight to the word at this position
944 : hi previewWord term=bold ctermbg=green guibg=green
945 : exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
946 : wincmd p " back to old window
947 : endif
948 : endif
949 :endfun
950
951==============================================================================
95211. Using hidden buffers *buffer-hidden*
953
954A hidden buffer is not displayed in a window, but is still loaded into memory.
955This makes it possible to jump from file to file, without the need to read or
956write the file every time you get another buffer in a window.
957{not available when compiled without the |+listcmds| feature}
958
959 *:buffer-!*
960If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
961commands that start editing another file: ":edit", ":next", ":tag", etc. The
962commands that move through the buffer list sometimes make the current buffer
963hidden although the 'hidden' option is not set. This happens when a buffer is
964modified, but is forced (with '!') to be removed from a window, and
965'autowrite' is off or the buffer can't be written.
966
967You can make a hidden buffer not hidden by starting to edit it with any
968command. Or by deleting it with the ":bdelete" command.
969
970The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
971can be used to make an exception for a specific buffer. It can take these
972values:
973 <empty> Use the value of 'hidden'.
974 hide Hide this buffer, also when 'hidden' is not set.
975 unload Don't hide but unload this buffer, also when 'hidden'
976 is set.
977 delete Delete the buffer.
978
979 *hidden-quit*
980When you try to quit Vim while there is a hidden, modified buffer, you will
981get an error message and Vim will make that buffer the current buffer. You
982can then decide to write this buffer (":wq") or quit without writing (":q!").
983Be careful: there may be more hidden, modified buffers!
984
985A buffer can also be unlisted. This means it exists, but it is not in the
986list of buffers. |unlisted-buffer|
987
988
Bram Moolenaard51cb702015-07-21 15:03:06 +0200989:files[!] [flags] *:files*
990:buffers[!] [flags] *:buffers* *:ls*
991:ls[!] [flags]
992 Show all buffers. Example:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000993
Bram Moolenaar97d62492012-11-15 21:28:22 +0100994 1 #h "/test/text" line 1 ~
995 2u "asdf" line 0 ~
996 3 %a + "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +0000997
998 When the [!] is included the list will show unlisted buffers
999 (the term "unlisted" is a bit confusing then...).
1000
1001 Each buffer has a unique number. That number will not change,
Bram Moolenaar0122c402015-02-03 19:13:34 +01001002 thus you can always go to a specific buffer with ":buffer N"
1003 or "N CTRL-^", where N is the buffer number.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001004
1005 Indicators (chars in the same column are mutually exclusive):
1006 u an unlisted buffer (only displayed when [!] is used)
1007 |unlisted-buffer|
1008 % the buffer in the current window
1009 # the alternate buffer for ":e #" and CTRL-^
1010 a an active buffer: it is loaded and visible
1011 h a hidden buffer: It is loaded, but currently not
1012 displayed in a window |hidden-buffer|
1013 - a buffer with 'modifiable' off
1014 = a readonly buffer
1015 + a modified buffer
1016 x a buffer with read errors
1017
Bram Moolenaard51cb702015-07-21 15:03:06 +02001018 [flags] can be a combination of the following characters,
1019 which restrict the buffers to be listed:
1020 + modified buffers
1021 - buffers with 'modifiable' off
1022 = readonly buffers
1023 a active buffers
1024 u unloaded buffers (overrides the "!")
1025 h hidden buffers
1026 x buffers with a read error
1027 % current buffer
1028 # alternate buffer
1029 Combining flags means they are "and"ed together, e.g.:
1030 h+ hidden buffers which are modified
1031 a+ active buffers which are modified
1032
Bram Moolenaar071d4272004-06-13 20:20:40 +00001033 *:bad* *:badd*
1034:bad[d] [+lnum] {fname}
1035 Add file name {fname} to the buffer list, without loading it.
1036 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001037 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +00001038 commands after the + will be ignored.
1039
1040:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
1041:bd[elete][!] [N]
1042 Unload buffer [N] (default: current buffer) and delete it from
1043 the buffer list. If the buffer was changed, this fails,
1044 unless when [!] is specified, in which case changes are lost.
1045 The file remains unaffected. Any windows for this buffer are
1046 closed. If buffer [N] is the current buffer, another buffer
1047 will be displayed instead. This is the most recent entry in
1048 the jump list that points into a loaded buffer.
1049 Actually, the buffer isn't completely deleted, it is removed
1050 from the buffer list |unlisted-buffer| and option values,
1051 variables and mappings/abbreviations for the buffer are
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001052 cleared. Examples: >
1053 :.,$-bdelete " delete buffers from the current one to
1054 " last but one
1055 :%bdelete " delete all buffers
1056<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001057
1058:bdelete[!] {bufname} *E93* *E94*
1059 Like ":bdelete[!] [N]", but buffer given by name. Note that a
1060 buffer whose name is a number cannot be referenced by that
1061 name; use the buffer number instead. Insert a backslash
1062 before a space in a buffer name.
1063
1064:bdelete[!] N1 N2 ...
1065 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
1066 buffer numbers or buffer names (but not buffer names that are
1067 a number). Insert a backslash before a space in a buffer
1068 name.
1069
1070:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
1071 |inclusive|.
1072
1073:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
1074:bw[ipeout][!] {bufname}
1075:N,Mbw[ipeout][!]
1076:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00001077 Like |:bdelete|, but really delete the buffer. Everything
1078 related to the buffer is lost. All marks in this buffer
1079 become invalid, option settings are lost, etc. Don't use this
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001080 unless you know what you are doing. Examples: >
1081 :.+,$bwipeout " wipe out all buffers after the current
1082 " one
1083 :%bwipeout " wipe out all buffers
1084<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001085
1086:[N]bun[load][!] *:bun* *:bunload* *E515*
1087:bun[load][!] [N]
1088 Unload buffer [N] (default: current buffer). The memory
1089 allocated for this buffer will be freed. The buffer remains
1090 in the buffer list.
1091 If the buffer was changed, this fails, unless when [!] is
1092 specified, in which case the changes are lost.
1093 Any windows for this buffer are closed. If buffer [N] is the
1094 current buffer, another buffer will be displayed instead.
1095 This is the most recent entry in the jump list that points
1096 into a loaded buffer.
1097
1098:bunload[!] {bufname}
1099 Like ":bunload[!] [N]", but buffer given by name. Note that a
1100 buffer whose name is a number cannot be referenced by that
1101 name; use the buffer number instead. Insert a backslash
1102 before a space in a buffer name.
1103
1104:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1105 |inclusive|.
1106
1107:bunload[!] N1 N2 ...
1108 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1109 buffer numbers or buffer names (but not buffer names that are
1110 a number). Insert a backslash before a space in a buffer
1111 name.
1112
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001113:[N]b[uffer][!] [+cmd] [N] *:b* *:bu* *:buf* *:buffer* *E86*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001114 Edit buffer [N] from the buffer list. If [N] is not given,
1115 the current buffer remains being edited. See |:buffer-!| for
1116 [!]. This will also edit a buffer that is not in the buffer
1117 list, without setting the 'buflisted' flag.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001118 Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001119
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001120:[N]b[uffer][!] [+cmd] {bufname}
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +00001121 Edit buffer for {bufname} from the buffer list. See
Bram Moolenaar071d4272004-06-13 20:20:40 +00001122 |:buffer-!| for [!]. This will also edit a buffer that is not
1123 in the buffer list, without setting the 'buflisted' flag.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001124 Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001125
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001126:[N]sb[uffer] [+cmd] [N] *:sb* *:sbuffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001127 Split window and edit buffer [N] from the buffer list. If [N]
1128 is not given, the current buffer is edited. Respects the
1129 "useopen" setting of 'switchbuf' when splitting. This will
1130 also edit a buffer that is not in the buffer list, without
1131 setting the 'buflisted' flag.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001132 Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001133
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001134:[N]sb[uffer] [+cmd] {bufname}
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +00001135 Split window and edit buffer for {bufname} from the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001136 list. This will also edit a buffer that is not in the buffer
1137 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001138 Note: If what you want to do is split the buffer, make a copy
1139 under another name, you can do it this way: >
1140 :w foobar | sp #
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001141< Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001142
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001143:[N]bn[ext][!] [+cmd] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001144 Go to [N]th next buffer in buffer list. [N] defaults to one.
1145 Wraps around the end of the buffer list.
1146 See |:buffer-!| for [!].
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001147 Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001148 If you are in a help buffer, this takes you to the next help
1149 buffer (if there is one). Similarly, if you are in a normal
1150 (non-help) buffer, this takes you to the next normal buffer.
1151 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001152 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001153 commands also work like this.
1154
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001155
Bram Moolenaar071d4272004-06-13 20:20:40 +00001156 *:sbn* *:sbnext*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001157:[N]sbn[ext] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001158 Split window and go to [N]th next buffer in buffer list.
1159 Wraps around the end of the buffer list. Uses 'switchbuf'
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001160 Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001161
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001162:[N]bN[ext][!] [+cmd] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1163:[N]bp[revious][!] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001164 Go to [N]th previous buffer in buffer list. [N] defaults to
1165 one. Wraps around the start of the buffer list.
1166 See |:buffer-!| for [!] and 'switchbuf'.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001167 Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001168
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001169:[N]sbN[ext] [+cmd] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1170:[N]sbp[revious] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001171 Split window and go to [N]th previous buffer in buffer list.
1172 Wraps around the start of the buffer list.
1173 Uses 'switchbuf'.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001174 Also see ||+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001175
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001176:br[ewind][!] [+cmd] *:br* *:brewind*
1177 Go to first buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001178 empty, go to the first unlisted buffer.
1179 See |:buffer-!| for [!].
1180
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001181:bf[irst] [+cmd] *:bf* *:bfirst*
1182 Same as |:brewind|.
1183 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001184
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001185:sbr[ewind] [+cmd] *:sbr* *:sbrewind*
1186 Split window and go to first buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001187 buffer list is empty, go to the first unlisted buffer.
1188 Respects the 'switchbuf' option.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001189 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001190
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001191:sbf[irst] [+cmd] *:sbf* *:sbfirst*
1192 Same as ":sbrewind".
Bram Moolenaar071d4272004-06-13 20:20:40 +00001193
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001194:bl[ast][!] [+cmd] *:bl* *:blast*
1195 Go to last buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001196 empty, go to the last unlisted buffer.
1197 See |:buffer-!| for [!].
1198
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001199:sbl[ast] [+cmd] *:sbl* *:sblast*
1200 Split window and go to last buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001201 buffer list is empty, go to the last unlisted buffer.
1202 Respects 'switchbuf' option.
1203
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001204:[N]bm[odified][!] [+cmd] [N] *:bm* *:bmodified* *E84*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001205 Go to [N]th next modified buffer. Note: this command also
1206 finds unlisted buffers. If there is no modified buffer the
1207 command fails.
1208
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001209:[N]sbm[odified] [+cmd] [N] *:sbm* *:sbmodified*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001210 Split window and go to [N]th next modified buffer.
1211 Respects 'switchbuf' option.
1212 Note: this command also finds buffers not in the buffer list.
1213
1214:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1215:[N]sun[hide] [N]
1216 Rearrange the screen to open one window for each loaded buffer
1217 in the buffer list. When a count is given, this is the
1218 maximum number of windows to open.
1219
1220:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1221:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1222 the buffer list. When a count is given, this is the maximum
1223 number of windows to open. 'winheight' also limits the number
1224 of windows opened ('winwidth' if |:vertical| was prepended).
1225 Buf/Win Enter/Leave autocommands are not executed for the new
1226 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001227 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001228 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001229
1230Note: All the commands above that start editing another buffer, keep the
1231'readonly' flag as it was. This differs from the ":edit" command, which sets
1232the 'readonly' flag each time the file is read.
1233
1234==============================================================================
123512. Special kinds of buffers *special-buffers*
1236
1237Instead of containing the text of a file, buffers can also be used for other
1238purposes. A few options can be set to change the behavior of a buffer:
1239 'bufhidden' what happens when the buffer is no longer displayed
1240 in a window.
1241 'buftype' what kind of a buffer this is
1242 'swapfile' whether the buffer will have a swap file
1243 'buflisted' buffer shows up in the buffer list
1244
1245A few useful kinds of a buffer:
1246
Bram Moolenaar280f1262006-01-30 00:14:18 +00001247quickfix Used to contain the error list or the location list. See
1248 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1249 option to "quickfix". You are not supposed to change this!
1250 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001251
1252help Contains a help file. Will only be created with the |:help|
1253 command. The flag that indicates a help buffer is internal
1254 and can't be changed. The 'buflisted' option will be reset
1255 for a help buffer.
1256
Bram Moolenaar677ee682005-01-27 14:41:15 +00001257directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001258 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001259 :setlocal buftype=nowrite
1260 :setlocal bufhidden=delete
1261 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001262< The buffer name is the name of the directory and is adjusted
1263 when using the |:cd| command.
1264
1265scratch Contains text that can be discarded at any time. It is kept
1266 when closing the window, it must be deleted explicitly.
1267 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001268 :setlocal buftype=nofile
1269 :setlocal bufhidden=hide
1270 :setlocal noswapfile
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001271< The buffer name can be used to identify the buffer, if you
1272 give it a meaningful name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001273
1274 *unlisted-buffer*
1275unlisted The buffer is not in the buffer list. It is not used for
1276 normal editing, but to show a help file, remember a file name
1277 or marks. The ":bdelete" command will also set this option,
1278 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001279 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001280<
1281
1282 vim:tw=78:ts=8:ft=help:norl: