xref: /vim-8.2.3635/runtime/doc/windows.txt (revision d1a8d658)
1*windows.txt*   For Vim version 8.2.  Last change: 2021 Sep 09
2
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{not able to use multiple windows when the |+windows| feature was disabled at
30compile time}
31
32==============================================================================
331. Introduction					*windows-intro* *window*
34
35Summary:
36   A buffer is the in-memory text of a file.
37   A window is a viewport on a buffer.
38   A tab page is a collection of windows.
39
40A window is a viewport onto a buffer.  You can use multiple windows on one
41buffer, or several windows on different buffers.
42
43A buffer is a file loaded into memory for editing.  The original file remains
44unchanged until you write the buffer to the file.
45
46A buffer can be in one of three states:
47
48							*active-buffer*
49active:   The buffer is displayed in a window.  If there is a file for this
50	  buffer, it has been read into the buffer.  The buffer may have been
51	  modified since then and thus be different from the file.
52							*hidden-buffer*
53hidden:   The buffer is not displayed.  If there is a file for this buffer, it
54	  has been read into the buffer.  Otherwise it's the same as an active
55	  buffer, you just can't see it.
56							*inactive-buffer*
57inactive: The buffer is not displayed and does not contain anything.  Options
58	  for the buffer are remembered if the file was once loaded.  It can
59	  contain marks from the |viminfo| file.  But the buffer doesn't
60	  contain text.
61
62In a table:
63
64state		displayed	loaded		":buffers"  ~
65		in window			shows	    ~
66active		  yes		 yes		  'a'
67hidden		  no		 yes		  'h'
68inactive	  no		 no		  ' '
69
70Note: All CTRL-W commands can also be executed with |:wincmd|, for those
71places where a Normal mode command can't be used or is inconvenient.
72
73The main Vim window can hold several split windows.  There are also tab pages
74|tab-page|, each of which can hold multiple windows.
75					*window-ID* *winid* *windowid*
76Each window has a unique identifier called the window ID.  This identifier
77will not change within a Vim session. The |win_getid()| and |win_id2tabwin()|
78functions can be used to convert between the window/tab number and the
79identifier.  There is also the window number, which may change whenever
80windows are opened or closed, see |winnr()|.
81The window number is only valid in one specific tab.  The window ID is valid
82across tabs.  For most functions that take a window ID or a window number, the
83window number only applies to the current tab, while the window ID can refer
84to a window in any tab.
85
86Each buffer has a unique number and the number will not change within a Vim
87session.  The |bufnr()| and |bufname()| functions can be used to convert
88between a buffer name and the buffer number.
89
90==============================================================================
912. Starting Vim						*windows-starting*
92
93By default, Vim starts with one window, just like Vi.
94
95The "-o" and "-O" arguments to Vim can be used to open a window for each file
96in the argument list.  The "-o" argument will split the windows horizontally;
97the "-O" argument will split the windows vertically.  If both "-o" and "-O"
98are given, the last one encountered will be used to determine the split
99orientation.  For example, this will open three windows, split horizontally: >
100	vim -o file1 file2 file3
101
102"-oN", where N is a decimal number, opens N windows split horizontally.  If
103there are more file names than windows, only N windows are opened and some
104files do not get a window.  If there are more windows than file names, the
105last few windows will be editing empty buffers.  Similarly, "-ON" opens N
106windows split vertically, with the same restrictions.
107
108If there are many file names, the windows will become very small.  You might
109want to set the 'winheight' and/or 'winwidth' options to create a workable
110situation.
111
112Buf/Win Enter/Leave |autocommand|s are not executed when opening the new
113windows and reading the files, that's only done when they are really entered.
114
115							*status-line*
116A status line will be used to separate windows.  The 'laststatus' option tells
117when the last window also has a status line:
118	'laststatus' = 0	never a status line
119	'laststatus' = 1	status line if there is more than one window
120	'laststatus' = 2	always a status line
121
122You can change the contents of the status line with the 'statusline' option.
123This option can be local to the window, so that you can have a different
124status line in each window.
125
126Normally, inversion is used to display the status line.  This can be changed
127with the 's' character in the 'highlight' option.  For example, "sb" sets it to
128bold characters.  If no highlighting is used for the status line ("sn"), the
129'^' character is used for the current window, and '=' for other windows.  If
130the mouse is supported and enabled with the 'mouse' option, a status line can
131be dragged to resize windows.
132
133Note: If you expect your status line to be in reverse video and it isn't,
134check if the 'highlight' option contains "si".  In version 3.0, this meant to
135invert the status line.  Now it should be "sr", reverse the status line, as
136"si" now stands for italic!  If italic is not available on your terminal, the
137status line is inverted anyway; you will only see this problem on terminals
138that have termcap codes for italics.
139
140							*filler-lines*
141The lines after the last buffer line in a window are called filler lines.  By
142default, these lines start with a tilde (~) character. The 'eob' item in the
143'fillchars' option can be used to change this character. By default, these
144characters are highlighted as NonText (|hl-NonText|). The EndOfBuffer
145highlight group (|hl-EndOfBuffer|) can be used to change the highlighting of
146the filler characters.
147
148==============================================================================
1493. Opening and closing a window				*opening-window* *E36*
150
151CTRL-W s						*CTRL-W_s*
152CTRL-W S						*CTRL-W_S*
153CTRL-W CTRL-S						*CTRL-W_CTRL-S*
154:[N]sp[lit] [++opt] [+cmd] [file]			*:sp* *:split*
155		Split current window in two.  The result is two viewports on
156		the same file.
157
158		Make the new window N high (default is to use half the height
159		of the current window).  Reduces the current window height to
160		create room (and others, if the 'equalalways' option is set,
161		'eadirection' isn't "hor", and one of them is higher than the
162		current or the new window).
163
164		If [file] is given it will be edited in the new window.  If it
165		is not loaded in any buffer, it will be read.  Else the new
166		window will use the already loaded buffer.
167
168		Note: CTRL-S does not work on all terminals and might block
169		further input, use CTRL-Q to get going again.
170		Also see |++opt| and |+cmd|.
171							*E242*
172		Be careful when splitting a window in an autocommand, it may
173		mess up the window layout if this happens while making other
174		window layout changes.
175
176CTRL-W CTRL-V						*CTRL-W_CTRL-V*
177CTRL-W v						*CTRL-W_v*
178:[N]vs[plit] [++opt] [+cmd] [file]			*:vs* *:vsplit*
179		Like |:split|, but split vertically.  The windows will be
180		spread out horizontally if
181		1. a width was not specified,
182		2. 'equalalways' is set,
183		3. 'eadirection' isn't "ver", and
184		4. one of the other windows is wider than the current or new
185		   window.
186		Note: In other places CTRL-Q does the same as CTRL-V, but here
187		it doesn't!
188
189CTRL-W n						*CTRL-W_n*
190CTRL-W CTRL_N						*CTRL-W_CTRL-N*
191:[N]new [++opt] [+cmd]					*:new*
192		Create a new window and start editing an empty file in it.
193		Make new window N high (default is to use half the existing
194		height).  Reduces the current window height to create room (and
195		others, if the 'equalalways' option is set and 'eadirection'
196		isn't "hor").
197		Also see |++opt| and |+cmd|.
198		If 'fileformats' is not empty, the first format given will be
199		used for the new buffer.  If 'fileformats' is empty, the
200		'fileformat' of the current buffer is used.  This can be
201		overridden with the |++opt| argument.
202		Autocommands are executed in this order:
203		1. WinLeave for the current window
204		2. WinEnter for the new window
205		3. BufLeave for the current buffer
206		4. BufEnter for the new buffer
207		This behaves like a ":split" first, and then an ":enew"
208		command.
209
210:[N]new [++opt] [+cmd] {file}
211:[N]sp[lit] [++opt] [+cmd] {file}			*:split_f*
212		Create a new window and start editing file {file} in it.  This
213		behaves almost like a ":split" first, and then an ":edit"
214		command, but the alternate file name in the original window is
215		set to {file}.
216		If [+cmd] is given, execute the command when the file has been
217		loaded |+cmd|.
218		Also see |++opt|.
219		Make new window N high (default is to use half the existing
220		height).  Reduces the current window height to create room
221		(and others, if the 'equalalways' option is set).
222
223:[N]vne[w] [++opt] [+cmd] [file]			*:vne* *:vnew*
224		Like |:new|, but split vertically.  If 'equalalways' is set
225		and 'eadirection' isn't "ver" the windows will be spread out
226		horizontally, unless a width was specified.
227
228:[N]sv[iew] [++opt] [+cmd] [file]		*:sv* *:sview* *splitview*
229		Same as ":split", but set 'readonly' option for this buffer.
230
231:[N]sf[ind] [++opt] [+cmd] {file}	     *:sf* *:sfi* *:sfind* *splitfind*
232		Same as ":split", but search for {file} in 'path' like in
233		|:find|.  Doesn't split if {file} is not found.
234
235CTRL-W CTRL-^					*CTRL-W_CTRL-^* *CTRL-W_^*
236CTRL-W ^	Split the current window in two and edit the alternate file.
237		When a count N is given, split the current window and edit
238		buffer N.  Similar to ":sp #" and ":sp #N", but it allows the
239		other buffer to be unnamed.  This command matches the behavior
240		of |CTRL-^|, except that it splits a window first.
241
242						*CTRL-W_:*
243CTRL-W :	Does the same as typing |:| - enter a command line.  Useful in a
244		terminal window, where all Vim commands must be preceded with
245		CTRL-W or 'termwinkey'.
246
247Note that the 'splitbelow' and 'splitright' options influence where a new
248window will appear.
249
250						*:vert* *:vertical*
251:vert[ical] {cmd}
252		Execute {cmd}.  If it contains a command that splits a window,
253		it will be split vertically.
254		Doesn't work for |:execute| and |:normal|.
255
256:lefta[bove] {cmd}				*:lefta* *:leftabove*
257:abo[veleft] {cmd}				*:abo* *:aboveleft*
258		Execute {cmd}.  If it contains a command that splits a window,
259		it will be opened left (vertical split) or above (horizontal
260		split) the current window.  Overrules 'splitbelow' and
261		'splitright'.
262		Doesn't work for |:execute| and |:normal|.
263
264:rightb[elow] {cmd}				*:rightb* *:rightbelow*
265:bel[owright] {cmd}				*:bel* *:belowright*
266		Execute {cmd}.  If it contains a command that splits a window,
267		it will be opened right (vertical split) or below (horizontal
268		split) the current window.  Overrules 'splitbelow' and
269		'splitright'.
270		Doesn't work for |:execute| and |:normal|.
271
272						*:topleft* *E442*
273:to[pleft] {cmd}
274		Execute {cmd}.  If it contains a command that splits a window,
275		it will appear at the top and occupy the full width of the Vim
276		window.  When the split is vertical the window appears at the
277		far left and occupies the full height of the Vim window.
278		Doesn't work for |:execute| and |:normal|.
279
280						*:bo* *:botright*
281:bo[tright] {cmd}
282		Execute {cmd}.  If it contains a command that splits a window,
283		it will appear at the bottom and occupy the full width of the
284		Vim window.  When the split is vertical the window appears at
285		the far right and occupies the full height of the Vim window.
286		Doesn't work for |:execute| and |:normal|.
287
288These command modifiers can be combined to make a vertically split window
289occupy the full height.  Example: >
290	:vertical topleft split tags
291Opens a vertically split, full-height window on the "tags" file at the far
292left of the Vim window.
293
294
295Closing a window
296----------------
297
298:q[uit]
299:{count}q[uit]						*:count_quit*
300CTRL-W q						*CTRL-W_q*
301CTRL-W CTRL-Q						*CTRL-W_CTRL-Q*
302		Without {count}: Quit the current window.  If {count} is
303		given quit the {count} window.
304							*edit-window*
305		When quitting the last edit window (not counting help or
306		preview windows), exit Vim.
307
308		When 'hidden' is set, and there is only one window for the
309		current buffer, it becomes hidden.  When 'hidden' is not set,
310		and there is only one window for the current buffer, and the
311		buffer was changed, the command fails.
312
313		(Note: CTRL-Q does not work on all terminals).
314
315		If [count] is greater than the last window number the last
316		window will be closed: >
317		    :1quit  " quit the first window
318		    :$quit  " quit the last window
319		    :9quit  " quit the last window
320			    " if there are fewer than 9 windows opened
321		    :-quit  " quit the previous window
322		    :+quit  " quit the next window
323		    :+2quit " quit the second next window
324<
325		When closing a help window, and this is not the only window,
326		Vim will try to restore the previous window layout, see
327		|:helpclose|.
328
329:q[uit]!
330:{count}q[uit]!
331		Without {count}: Quit the current window.  If {count} is
332		given quit the {count} window.
333
334		If this was the last window for a buffer, any changes to that
335		buffer are lost.  When quitting the last window (not counting
336		help windows), exit Vim.  The contents of the buffer are lost,
337		even when 'hidden' is set.
338
339:clo[se][!]
340:{count}clo[se][!]
341CTRL-W c					*CTRL-W_c* *:clo* *:close*
342		Without {count}: Close the current window.  If {count} is
343		given close the {count} window.
344
345		When the 'hidden' option is set, or when the buffer was
346		changed and the [!] is used, the buffer becomes hidden (unless
347		there is another window editing it).
348
349		When there is only one |edit-window| in the current tab page
350		and there is another tab page, this closes the current tab
351		page.  |tab-page|.
352
353		This command fails when:			*E444*
354		- There is only one window on the screen.
355		- When 'hidden' is not set, [!] is not used, the buffer has
356		  changes, and there is no other window on this buffer.
357		Changes to the buffer are not written and won't get lost, so
358		this is a "safe" command.
359
360CTRL-W CTRL-C						*CTRL-W_CTRL-C*
361		You might have expected that CTRL-W CTRL-C closes the current
362		window, but that does not work, because the CTRL-C cancels the
363		command.
364
365							*:hide*
366:hid[e]
367:{count}hid[e]
368		Without {count}: Quit the current window, unless it is the
369		last window on the screen.
370		If {count} is given quit the {count} window.
371
372		The buffer becomes hidden (unless there is another window
373		editing it or 'bufhidden' is "unload", "delete" or "wipe").
374		If the window is the last one in the current tab page the tab
375		page is closed.  |tab-page|
376
377		The value of 'hidden' is irrelevant for this command.  Changes
378		to the buffer are not written and won't get lost, so this is a
379		"safe" command.
380
381:hid[e] {cmd}	Execute {cmd} with 'hidden' is set.  The previous value of
382		'hidden' is restored after {cmd} has been executed.
383		Example: >
384		    :hide edit Makefile
385<		This will edit "Makefile", and hide the current buffer if it
386		has any changes.
387
388:on[ly][!]
389:{count}on[ly][!]
390CTRL-W o						*CTRL-W_o* *E445*
391CTRL-W CTRL-O					*CTRL-W_CTRL-O* *:on* *:only*
392		Make the current window the only one on the screen.  All other
393		windows are closed.  For {count} see the `:quit` command
394		above |:count_quit|.
395
396		When the 'hidden' option is set, all buffers in closed windows
397		become hidden.
398
399		When 'hidden' is not set, and the 'autowrite' option is set,
400		modified buffers are written.  Otherwise, windows that have
401		buffers that are modified are not removed, unless the [!] is
402		given, then they become hidden.  But modified buffers are
403		never abandoned, so changes cannot get lost.
404
405==============================================================================
4064. Moving cursor to other windows			*window-move-cursor*
407
408CTRL-W <Down>					*CTRL-W_<Down>*
409CTRL-W CTRL-J					*CTRL-W_CTRL-J* *CTRL-W_j*
410CTRL-W j	Move cursor to Nth window below current one.  Uses the cursor
411		position to select between alternatives.
412
413CTRL-W <Up>					*CTRL-W_<Up>*
414CTRL-W CTRL-K					*CTRL-W_CTRL-K* *CTRL-W_k*
415CTRL-W k	Move cursor to Nth window above current one.  Uses the cursor
416		position to select between alternatives.
417
418CTRL-W <Left>					*CTRL-W_<Left>*
419CTRL-W CTRL-H					*CTRL-W_CTRL-H*
420CTRL-W <BS>					*CTRL-W_<BS>* *CTRL-W_h*
421CTRL-W h	Move cursor to Nth window left of current one.  Uses the
422		cursor position to select between alternatives.
423
424CTRL-W <Right>					*CTRL-W_<Right>*
425CTRL-W CTRL-L					*CTRL-W_CTRL-L* *CTRL-W_l*
426CTRL-W l	Move cursor to Nth window right of current one.  Uses the
427		cursor position to select between alternatives.
428
429CTRL-W w					*CTRL-W_w* *CTRL-W_CTRL-W*
430CTRL-W CTRL-W	Without count: move cursor to window below/right of the
431		current one.  If there is no window below or right, go to
432		top-left window.
433		With count: go to Nth window (windows are numbered from
434		top-left to bottom-right).  To obtain the window number see
435		|bufwinnr()| and |winnr()|.  When N is larger than the number
436		of windows go to the last window.
437
438						*CTRL-W_W*
439CTRL-W W	Without count: move cursor to window above/left of current
440		one.  If there is no window above or left, go to bottom-right
441		window.  With count: go to Nth window, like with CTRL-W w.
442
443CTRL-W t					*CTRL-W_t* *CTRL-W_CTRL-T*
444CTRL-W CTRL-T	Move cursor to top-left window.
445
446CTRL-W b					*CTRL-W_b* *CTRL-W_CTRL-B*
447CTRL-W CTRL-B	Move cursor to bottom-right window.
448
449CTRL-W p					*CTRL-W_p* *CTRL-W_CTRL-P*
450CTRL-W CTRL-P	Go to previous (last accessed) window.
451
452						*CTRL-W_P* *E441*
453CTRL-W P	Go to preview window.  When there is no preview window this is
454		an error.
455		{not available when compiled without the |+quickfix| feature}
456
457If Visual mode is active and the new window is not for the same buffer, the
458Visual mode is ended.  If the window is on the same buffer, the cursor
459position is set to keep the same Visual area selected.
460
461						*:winc* *:wincmd*
462These commands can also be executed with ":wincmd":
463
464:[count]winc[md] {arg}
465		Like executing CTRL-W [count] {arg}.  Example: >
466			:wincmd j
467<		Moves to the window below the current one.
468		This command is useful when a Normal mode cannot be used (for
469		the |CursorHold| autocommand event).  Or when a Normal mode
470		command is inconvenient.
471		The count can also be a window number.  Example: >
472			:exe nr . "wincmd w"
473<		This goes to window "nr".
474
475==============================================================================
4765. Moving windows around				*window-moving*
477
478CTRL-W r				*CTRL-W_r* *CTRL-W_CTRL-R* *E443*
479CTRL-W CTRL-R	Rotate windows downwards/rightwards.  The first window becomes
480		the second one, the second one becomes the third one, etc.
481		The last window becomes the first window.  The cursor remains
482		in the same window.
483		This only works within the row or column of windows that the
484		current window is in.
485
486						*CTRL-W_R*
487CTRL-W R	Rotate windows upwards/leftwards.  The second window becomes
488		the first one, the third one becomes the second one, etc.  The
489		first window becomes the last window.  The cursor remains in
490		the same window.
491		This only works within the row or column of windows that the
492		current window is in.
493
494CTRL-W x					*CTRL-W_x* *CTRL-W_CTRL-X*
495CTRL-W CTRL-X	Without count: Exchange current window with next one.  If there
496		is no next window, exchange with previous window.
497		With count: Exchange current window with Nth window (first
498		window is 1).  The cursor is put in the other window.
499		When vertical and horizontal window splits are mixed, the
500		exchange is only done in the row or column of windows that the
501		current window is in.
502
503The following commands can be used to change the window layout.  For example,
504when there are two vertically split windows, CTRL-W K will change that in
505horizontally split windows.  CTRL-W H does it the other way around.
506
507						*CTRL-W_K*
508CTRL-W K	Move the current window to be at the very top, using the full
509		width of the screen.  This works like closing the current
510		window and then creating another one with ":topleft split",
511		except that the current window contents is used for the new
512		window.
513
514						*CTRL-W_J*
515CTRL-W J	Move the current window to be at the very bottom, using the
516		full width of the screen.  This works like closing the current
517		window and then creating another one with ":botright split",
518		except that the current window contents is used for the new
519		window.
520
521						*CTRL-W_H*
522CTRL-W H	Move the current window to be at the far left, using the
523		full height of the screen.  This works like closing the
524		current window and then creating another one with
525		`:vert topleft split`, except that the current window contents
526		is used for the new window.
527
528						*CTRL-W_L*
529CTRL-W L	Move the current window to be at the far right, using the full
530		height of the screen.  This works like closing the
531		current window and then creating another one with
532		`:vert botright split`, except that the current window
533		contents is used for the new window.
534
535						*CTRL-W_T*
536CTRL-W T	Move the current window to a new tab page.  This fails if
537		there is only one window in the current tab page.
538		When a count is specified the new tab page will be opened
539		before the tab page with this index.  Otherwise it comes after
540		the current tab page.
541
542==============================================================================
5436. Window resizing					*window-resize*
544
545						*CTRL-W_=*
546CTRL-W =	Make all windows (almost) equally high and wide, but use
547		'winheight' and 'winwidth' for the current window.
548		Windows with 'winfixheight' set keep their height and windows
549		with 'winfixwidth' set keep their width.
550
551:res[ize] -N					*:res* *:resize* *CTRL-W_-*
552CTRL-W -	Decrease current window height by N (default 1).
553		If used after |:vertical|: decrease width by N.
554
555:res[ize] +N					*CTRL-W_+*
556CTRL-W +	Increase current window height by N (default 1).
557		If used after |:vertical|: increase width by N.
558
559:res[ize] [N]
560CTRL-W CTRL-_					*CTRL-W_CTRL-_* *CTRL-W__*
561CTRL-W _	Set current window height to N (default: highest possible).
562
563:{winnr}res[ize] [+-]N
564		Like `:resize` above, but apply the size to window {winnr}
565		instead of the current window.
566
567z{nr}<CR>	Set current window height to {nr}.
568
569						*CTRL-W_<*
570CTRL-W <	Decrease current window width by N (default 1).
571
572						*CTRL-W_>*
573CTRL-W >	Increase current window width by N (default 1).
574
575:vert[ical] res[ize] [N]			*:vertical-resize* *CTRL-W_bar*
576CTRL-W |	Set current window width to N (default: widest possible).
577
578You can also resize a window by dragging a status line up or down with the
579mouse.  Or by dragging a vertical separator line left or right.  This only
580works if the version of Vim that is being used supports the mouse and the
581'mouse' option has been set to enable it.
582
583The option 'winheight' ('wh') is used to set the minimal window height of the
584current window.  This option is used each time another window becomes the
585current window.  If the option is '0', it is disabled.  Set 'winheight' to a
586very large value, e.g., '9999', to make the current window always fill all
587available space.  Set it to a reasonable value, e.g., '10', to make editing in
588the current window comfortable.
589
590The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
591the current window.
592
593When the option 'equalalways' ('ea') is set, all the windows are automatically
594made the same size after splitting or closing a window.  If you don't set this
595option, splitting a window will reduce the size of the current window and
596leave the other windows the same.  When closing a window, the extra lines are
597given to the window above it.
598
599The 'eadirection' option limits the direction in which the 'equalalways'
600option is applied.  The default "both" resizes in both directions.  When the
601value is "ver" only the heights of windows are equalized.  Use this when you
602have manually resized a vertically split window and want to keep this width.
603Likewise, "hor" causes only the widths of windows to be equalized.
604
605The option 'cmdheight' ('ch') is used to set the height of the command-line.
606If you are annoyed by the |hit-enter| prompt for long messages, set this
607option to 2 or 3.
608
609If there is only one window, resizing that window will also change the command
610line height.  If there are several windows, resizing the current window will
611also change the height of the window below it (and sometimes the window above
612it).
613
614The minimal height and width of a window is set with 'winminheight' and
615'winminwidth'.  These are hard values, a window will never become smaller.
616
617==============================================================================
6187. Argument and buffer list commands			*buffer-list*
619
620      args list		       buffer list	   meaning ~
6211. :[N]argument [N]	11. :[N]buffer [N]	to arg/buf N
6222. :[N]next [file ..]	12. :[N]bnext [N]	to Nth next arg/buf
6233. :[N]Next [N]		13. :[N]bNext [N]	to Nth previous arg/buf
6244. :[N]previous	[N]	14. :[N]bprevious [N]	to Nth previous arg/buf
6255. :rewind / :first	15. :brewind / :bfirst	to first arg/buf
6266. :last		16. :blast		to last arg/buf
6277. :all			17. :ball		edit all args/buffers
628			18. :unhide		edit all loaded buffers
629			19. :[N]bmod [N]	to Nth modified buf
630
631  split & args list	  split & buffer list	   meaning ~
63221. :[N]sargument [N]   31. :[N]sbuffer [N]	split + to arg/buf N
63322. :[N]snext [file ..] 32. :[N]sbnext [N]      split + to Nth next arg/buf
63423. :[N]sNext [N]       33. :[N]sbNext [N]      split + to Nth previous arg/buf
63524. :[N]sprevious [N]   34. :[N]sbprevious [N]  split + to Nth previous arg/buf
63625. :srewind / :sfirst	35. :sbrewind / :sbfirst split + to first arg/buf
63726. :slast		36. :sblast		split + to last arg/buf
63827. :sall		37. :sball		edit all args/buffers
639			38. :sunhide		edit all loaded buffers
640			39. :[N]sbmod [N]	split + to Nth modified buf
641
64240. :args		list of arguments
64341. :buffers		list of buffers
644
645The meaning of [N] depends on the command:
646 [N] is the number of buffers to go forward/backward on 2/12/22/32,
647     3/13/23/33, and 4/14/24/34
648 [N] is an argument number, defaulting to current argument, for 1 and 21
649 [N] is a buffer number, defaulting to current buffer, for 11 and 31
650 [N] is a count for 19 and 39
651
652Note: ":next" is an exception, because it must accept a list of file names
653for compatibility with Vi.
654
655
656The argument list and multiple windows
657--------------------------------------
658
659The current position in the argument list can be different for each window.
660Remember that when doing ":e file", the position in the argument list stays
661the same, but you are not editing the file at that position.  To indicate
662this, the file message (and the title, if you have one) shows
663"(file (N) of M)", where "(N)" is the current position in the file list, and
664"M" the number of files in the file list.
665
666All the entries in the argument list are added to the buffer list.  Thus, you
667can also get to them with the buffer list commands, like ":bnext".
668
669:[N]al[l][!] [N]				*:al* *:all* *:sal* *:sall*
670:[N]sal[l][!] [N]
671		Rearrange the screen to open one window for each argument.
672		All other windows are closed.  When a count is given, this is
673		the maximum number of windows to open.
674		With the |:tab| modifier open a tab page for each argument.
675		When there are more arguments than 'tabpagemax' further ones
676		become split windows in the last tab page.
677		When the 'hidden' option is set, all buffers in closed windows
678		become hidden.
679		When 'hidden' is not set, and the 'autowrite' option is set,
680		modified buffers are written.  Otherwise, windows that have
681		buffers that are modified are not removed, unless the [!] is
682		given, then they become hidden.  But modified buffers are
683		never abandoned, so changes cannot get lost.
684		[N] is the maximum number of windows to open.  'winheight'
685		also limits the number of windows opened ('winwidth' if
686		|:vertical| was prepended).
687		Buf/Win Enter/Leave autocommands are not executed for the new
688		windows here, that's only done when they are really entered.
689		If autocommands change the window layout while this command is
690		busy an error will be given. *E249*
691
692:[N]sa[rgument][!] [++opt] [+cmd] [N]			*:sa* *:sargument*
693		Short for ":split | argument [N]": split window and go to Nth
694		argument.  But when there is no such argument, the window is
695		not split.  Also see |++opt| and |+cmd|.
696
697:[N]sn[ext][!] [++opt] [+cmd] [file ..]			*:sn* *:snext*
698		Short for ":split | [N]next": split window and go to Nth next
699		argument.  But when there is no next file, the window is not
700		split.  Also see |++opt| and |+cmd|.
701
702:[N]spr[evious][!] [++opt] [+cmd] [N]			*:spr* *:sprevious*
703:[N]sN[ext][!] [++opt] [+cmd] [N]			*:sN* *:sNext*
704		Short for ":split | [N]Next": split window and go to Nth
705		previous argument.  But when there is no previous file, the
706		window is not split.  Also see |++opt| and |+cmd|.
707
708						*:sre* *:srewind*
709:sre[wind][!] [++opt] [+cmd]
710		Short for ":split | rewind": split window and go to first
711		argument.  But when there is no argument list, the window is
712		not split.  Also see |++opt| and |+cmd|.
713
714						*:sfir* *:sfirst*
715:sfir[st] [++opt] [+cmd]
716		Same as ":srewind".
717
718						*:sla* *:slast*
719:sla[st][!] [++opt] [+cmd]
720		Short for ":split | last": split window and go to last
721		argument.  But when there is no argument list, the window is
722		not split.  Also see |++opt| and |+cmd|.
723
724						*:dr* *:drop*
725:dr[op] [++opt] [+cmd] {file} ..
726		Edit the first {file} in a window.
727		- If the file is already open in a window change to that
728		  window.
729		- If the file is not open in a window edit the file in the
730		  current window.  If the current buffer can't be |abandon|ed,
731		  the window is split first.
732		- Windows that are not in the argument list or are not full
733		  width will be closed if possible.
734		The |argument-list| is set, like with the |:next| command.
735		The purpose of this command is that it can be used from a
736		program that wants Vim to edit another file, e.g., a debugger.
737		When using the |:tab| modifier each argument is opened in a
738		tab page.  The last window is used if it's empty.
739		Also see |++opt| and |+cmd|.
740
741==============================================================================
7428. Do a command in all buffers or windows			*list-repeat*
743
744							*:windo*
745:[range]windo {cmd}	Execute {cmd} in each window or if [range] is given
746			only in windows for which the window number lies in
747			the [range].  It works like doing this: >
748				CTRL-W t
749				:{cmd}
750				CTRL-W w
751				:{cmd}
752				etc.
753<			This only operates in the current tab page.
754			When an error is detected on one window, further
755			windows will not be visited.
756			The last window (or where an error occurred) becomes
757			the current window.
758			{cmd} can contain '|' to concatenate several commands.
759			{cmd} must not open or close windows or reorder them.
760
761			Also see |:tabdo|, |:argdo|, |:bufdo|, |:cdo|, |:ldo|,
762			|:cfdo| and |:lfdo|
763
764							*:bufdo*
765:[range]bufdo[!] {cmd}	Execute {cmd} in each buffer in the buffer list or if
766			[range] is given only for buffers for which their
767			buffer number is in the [range].  It works like doing
768			this: >
769				:bfirst
770				:{cmd}
771				:bnext
772				:{cmd}
773				etc.
774<			When the current file can't be |abandon|ed and the [!]
775			is not present, the command fails.
776			When an error is detected on one buffer, further
777			buffers will not be visited.
778			Unlisted buffers are skipped.
779			The last buffer (or where an error occurred) becomes
780			the current buffer.
781			{cmd} can contain '|' to concatenate several commands.
782			{cmd} must not delete buffers or add buffers to the
783			buffer list.
784			Note: While this command is executing, the Syntax
785			autocommand event is disabled by adding it to
786			'eventignore'.  This considerably speeds up editing
787			each buffer.
788
789			Also see |:tabdo|, |:argdo|, |:windo|, |:cdo|, |:ldo|,
790			|:cfdo| and |:lfdo|
791
792Examples: >
793
794	:windo set nolist foldcolumn=0 | normal! zn
795
796This resets the 'list' option and disables folding in all windows. >
797
798	:bufdo set fileencoding= | update
799
800This resets the 'fileencoding' in each buffer and writes it if this changed
801the buffer.  The result is that all buffers will use the 'encoding' encoding
802(if conversion succeeds).
803
804==============================================================================
8059. Tag or file name under the cursor			*window-tag*
806
807							*:sta* *:stag*
808:sta[g][!] [tagname]
809		Does ":tag[!] [tagname]" and splits the window for the found
810		tag.  See also |:tag|.
811
812CTRL-W ]					*CTRL-W_]* *CTRL-W_CTRL-]*
813CTRL-W CTRL-]	Split current window in two.  Use identifier under cursor as a
814		tag and jump to it in the new upper window.
815		In Visual mode uses the Visually selected text as a tag.
816		Make new window N high.
817
818							*CTRL-W_g]*
819CTRL-W g ]	Split current window in two.  Use identifier under cursor as a
820		tag and perform ":tselect" on it in the new upper window.
821		In Visual mode uses the Visually selected text as a tag.
822		Make new window N high.
823
824							*CTRL-W_g_CTRL-]*
825CTRL-W g CTRL-]	Split current window in two.  Use identifier under cursor as a
826		tag and perform ":tjump" on it in the new upper window.
827		In Visual mode uses the Visually selected text as a tag.
828		Make new window N high.
829
830CTRL-W f					*CTRL-W_f* *CTRL-W_CTRL-F*
831CTRL-W CTRL-F	Split current window in two.  Edit file name under cursor.
832		Like ":split gf", but window isn't split if the file does not
833		exist.
834		Uses the 'path' variable as a list of directory names where to
835		look for the file.  Also the path for current file is
836		used to search for the file name.
837		If the name is a hypertext link that looks like
838		"type://machine/path", only "/path" is used.
839		If a count is given, the count'th matching file is edited.
840		{not available when the |+file_in_path| feature was disabled
841		at compile time}
842
843CTRL-W F						*CTRL-W_F*
844		Split current window in two.  Edit file name under cursor and
845		jump to the line number following the file name. See |gF| for
846		details on how the line number is obtained.
847		{not available when the |+file_in_path| feature was disabled
848		at compile time}
849
850CTRL-W gf						*CTRL-W_gf*
851		Open a new tab page and edit the file name under the cursor.
852		Like "tab split" and "gf", but the new tab page isn't created
853		if the file does not exist.
854		{not available when the |+file_in_path| feature was disabled
855		at compile time}
856
857CTRL-W gF						*CTRL-W_gF*
858		Open a new tab page and edit the file name under the cursor
859		and jump to the line number following the file name.  Like
860		"tab split" and "gF", but the new tab page isn't created if
861		the file does not exist.
862		{not available when the |+file_in_path| feature was disabled
863		at compile time}
864
865CTRL-W gt						*CTRL-W_gt*
866		Go to next tab page, same as `gt`.
867
868CTRL-W gT						*CTRL-W_gT*
869		Go to previous tab page, same as `gT`.
870
871Also see |CTRL-W_CTRL-I|: open window for an included file that includes
872the keyword under the cursor.
873
874==============================================================================
87510. The preview window				*preview-window*
876
877The preview window is a special window to show (preview) another file.  It is
878normally a small window used to show an include file or definition of a
879function.
880{not available when compiled without the |+quickfix| feature}
881
882There can be only one preview window (per tab page).  It is created with one
883of the commands below.  The 'previewheight' option can be set to specify the
884height of the preview window when it's opened.  The 'previewwindow' option is
885set in the preview window to be able to recognize it.  The 'winfixheight'
886option is set to have it keep the same height when opening/closing other
887windows.
888						*preview-popup*
889Alternatively, a popup window can be used by setting the 'previewpopup'
890option.  When set, it overrules the 'previewwindow' and 'previewheight'
891settings.  The option is a comma separated list of values:
892	height		maximum height of the popup
893	width		maximum width of the popup
894	highlight	highlight group of the popup (default is Pmenu)
895Example: >
896	:set previewpopup=height:10,width:60
897
898A few peculiarities:
899- If the file is in a buffer already, it will be re-used.  This will allow for
900  editing the file while it's visible in the popup window.
901- No ATTENTION dialog will be used, since you can't edit the file in the popup
902  window.  However, if you later open the same buffer in a normal window, you
903  may not notice it's edited elsewhere.  And when then using ":edit" to
904  trigger the ATTENTION and responding "A" for Abort, the preview window will
905  become empty.
906
907						*:pta* *:ptag*
908:pta[g][!] [tagname]
909		Does ":tag[!] [tagname]" and shows the found tag in a
910		"Preview" window without changing the current buffer or cursor
911		position.  If a "Preview" window already exists, it is re-used
912		(like a help window is).  If a new one is opened,
913		'previewheight' is used for the height of the window.   See
914		also |:tag|.
915		See below for an example. |CursorHold-example|
916		Small difference from |:tag|: When [tagname] is equal to the
917		already displayed tag, the position in the matching tag list
918		is not reset.  This makes the CursorHold example work after a
919		|:ptnext|.
920
921CTRL-W z					*CTRL-W_z*
922CTRL-W CTRL-Z					*CTRL-W_CTRL-Z* *:pc* *:pclose*
923:pc[lose][!]	Close any "Preview" window currently open.  When the 'hidden'
924		option is set, or when the buffer was changed and the [!] is
925		used, the buffer becomes hidden (unless there is another
926		window editing it).  The command fails if any "Preview" buffer
927		cannot be closed.  See also |:close|.
928
929							*:pp* *:ppop*
930:[count]pp[op][!]
931		Does ":[count]pop[!]" in the preview window.  See |:pop| and
932		|:ptag|.
933
934CTRL-W }						*CTRL-W_}*
935		Use identifier under cursor as a tag and perform a :ptag on
936		it.  Make the new Preview window (if required) N high.  If N is
937		not given, 'previewheight' is used.
938
939CTRL-W g }						*CTRL-W_g}*
940		Use identifier under cursor as a tag and perform a :ptjump on
941		it.  Make the new Preview window (if required) N high.  If N is
942		not given, 'previewheight' is used.
943
944							*:ped* *:pedit*
945:ped[it][!] [++opt] [+cmd] {file}
946		Edit {file} in the preview window.  The preview window is
947		opened like with |:ptag|.  The current window and cursor
948		position isn't changed.  Useful example: >
949			:pedit +/fputc /usr/include/stdio.h
950<
951							*:ps* *:psearch*
952:[range]ps[earch][!] [count] [/]pattern[/]
953		Works like |:ijump| but shows the found match in the preview
954		window.  The preview window is opened like with |:ptag|.  The
955		current window and cursor position isn't changed.  Useful
956		example: >
957			:psearch popen
958<		Like with the |:ptag| command, you can use this to
959		automatically show information about the word under the
960		cursor.  This is less clever than using |:ptag|, but you don't
961		need a tags file and it will also find matches in system
962		include files.  Example: >
963  :au! CursorHold *.[ch] ++nested exe "silent! psearch " . expand("<cword>")
964<		Warning: This can be slow.
965
966Example						*CursorHold-example*  >
967
968  :au! CursorHold *.[ch] ++nested exe "silent! ptag " . expand("<cword>")
969
970This will cause a ":ptag" to be executed for the keyword under the cursor,
971when the cursor hasn't moved for the time set with 'updatetime'.  The "nested"
972makes other autocommands be executed, so that syntax highlighting works in the
973preview window.  The "silent!" avoids an error message when the tag could not
974be found.  Also see |CursorHold|.  To disable this again: >
975
976  :au! CursorHold
977
978A nice addition is to highlight the found tag, avoid the ":ptag" when there
979is no word under the cursor, and a few other things: >
980
981  :au! CursorHold *.[ch] ++nested call PreviewWord()
982  :func PreviewWord()
983  :  if &previewwindow			" don't do this in the preview window
984  :    return
985  :  endif
986  :  let w = expand("<cword>")		" get the word under cursor
987  :  if w =~ '\a'			" if the word contains a letter
988  :
989  :    " Delete any existing highlight before showing another tag
990  :    silent! wincmd P			" jump to preview window
991  :    if &previewwindow			" if we really get there...
992  :      match none			" delete existing highlight
993  :      wincmd p			" back to old window
994  :    endif
995  :
996  :    " Try displaying a matching tag for the word under the cursor
997  :    try
998  :       exe "ptag " . w
999  :    catch
1000  :      return
1001  :    endtry
1002  :
1003  :    silent! wincmd P			" jump to preview window
1004  :    if &previewwindow		" if we really get there...
1005  :	 if has("folding")
1006  :	   silent! .foldopen		" don't want a closed fold
1007  :	 endif
1008  :	 call search("$", "b")		" to end of previous line
1009  :	 let w = substitute(w, '\\', '\\\\', "")
1010  :	 call search('\<\V' . w . '\>')	" position cursor on match
1011  :	 " Add a match highlight to the word at this position
1012  :      hi previewWord term=bold ctermbg=green guibg=green
1013  :	 exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
1014  :      wincmd p			" back to old window
1015  :    endif
1016  :  endif
1017  :endfun
1018
1019==============================================================================
102011. Using hidden buffers				*buffer-hidden*
1021
1022A hidden buffer is not displayed in a window, but is still loaded into memory.
1023This makes it possible to jump from file to file, without the need to read or
1024write the file every time you get another buffer in a window.
1025
1026							*:buffer-!*
1027If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
1028commands that start editing another file: ":edit", ":next", ":tag", etc.  The
1029commands that move through the buffer list sometimes make the current buffer
1030hidden although the 'hidden' option is not set.  This happens when a buffer is
1031modified, but is forced (with '!') to be removed from a window, and
1032'autowrite' is off or the buffer can't be written.
1033
1034You can make a hidden buffer not hidden by starting to edit it with any
1035command.  Or by deleting it with the ":bdelete" command.
1036
1037The 'hidden' is global, it is used for all buffers.  The 'bufhidden' option
1038can be used to make an exception for a specific buffer.  It can take these
1039values:
1040	<empty>		Use the value of 'hidden'.
1041	hide		Hide this buffer, also when 'hidden' is not set.
1042	unload		Don't hide but unload this buffer, also when 'hidden'
1043			is set.
1044	delete		Delete the buffer.
1045
1046							*hidden-quit*
1047When you try to quit Vim while there is a hidden, modified buffer, you will
1048get an error message and Vim will make that buffer the current buffer.  You
1049can then decide to write this buffer (":wq") or quit without writing (":q!").
1050Be careful: there may be more hidden, modified buffers!
1051
1052A buffer can also be unlisted.  This means it exists, but it is not in the
1053list of buffers. |unlisted-buffer|
1054
1055
1056:files[!] [flags]				*:files*
1057:buffers[!] [flags]				*:buffers* *:ls*
1058:ls[!] [flags]
1059		Show all buffers.  Example:
1060
1061			1 #h   "/test/text"		line 1 ~
1062			2u     "asdf"			line 0 ~
1063			3 %a + "version.c"		line 1 ~
1064
1065		When the [!] is included the list will show unlisted buffers
1066		(the term "unlisted" is a bit confusing then...).
1067
1068		Each buffer has a unique number.  That number will not change,
1069		thus you can always go to a specific buffer with ":buffer N"
1070		or "N CTRL-^", where N is the buffer number.
1071
1072		For the file name these special values are used:
1073			[Prompt]	|prompt-buffer|
1074			[Popup]		buffer of a |popup-window|
1075			[Scratch]	'buftype' is "nofile"
1076			[No Name]	no file name specified
1077		For a |terminal-window| buffer the status is used.
1078
1079		Indicators (chars in the same column are mutually exclusive):
1080		u	an unlisted buffer (only displayed when [!] is used)
1081			   |unlisted-buffer|
1082		 %	the buffer in the current window
1083		 #	the alternate buffer for ":e #" and CTRL-^
1084		  a	an active buffer: it is loaded and visible
1085		  h	a hidden buffer: It is loaded, but currently not
1086			   displayed in a window |hidden-buffer|
1087		   -	a buffer with 'modifiable' off
1088		   =	a readonly buffer
1089		   R	a terminal buffer with a running job
1090		   F	a terminal buffer with a finished job
1091		   ?    a terminal buffer without a job: `:terminal NONE`
1092		    +	a modified buffer
1093		    x   a buffer with read errors
1094
1095		[flags] can be a combination of the following characters,
1096		which restrict the buffers to be listed:
1097		     +   modified buffers
1098		     -   buffers with 'modifiable' off
1099		     =   readonly buffers
1100		     a   active buffers
1101		     u   unlisted buffers (overrides the "!")
1102		     h   hidden buffers
1103		     x   buffers with a read error
1104		     %   current buffer
1105		     #   alternate buffer
1106		     R	 terminal buffers with a running job
1107		     F	 terminal buffers with a finished job
1108		     ?   terminal buffers without a job: `:terminal NONE`
1109		     t   show time last used and sort buffers
1110		Combining flags means they are "and"ed together, e.g.:
1111		     h+   hidden buffers which are modified
1112		     a+   active buffers which are modified
1113
1114		When using |:filter| the pattern is matched against the
1115		displayed buffer name, e.g.: >
1116			filter /\.vim/ ls
1117<
1118						*:bad* *:badd*
1119:bad[d]	[+lnum] {fname}
1120		Add file name {fname} to the buffer list, without loading it,
1121		if it wasn't listed yet.  If the buffer was previously
1122		deleted, not wiped, it will be made listed again.
1123		If "lnum" is specified, the cursor will be positioned at that
1124		line when the buffer is first entered.  Note that other
1125		commands after the + will be ignored.
1126
1127						 *:balt*
1128:balt [+lnum] {fname}
1129		Like `:badd` and also set the alternate file for the current
1130		window to {fname}.
1131
1132:[N]bd[elete][!]			*:bd* *:bdel* *:bdelete* *E516*
1133:bd[elete][!] [N]
1134		Unload buffer [N] (default: current buffer) and delete it from
1135		the buffer list.  If the buffer was changed, this fails,
1136		unless when [!] is specified, in which case changes are lost.
1137		The file remains unaffected.  Any windows for this buffer are
1138		closed.  If buffer [N] is the current buffer, another buffer
1139		will be displayed instead.  This is the most recent entry in
1140		the jump list that points into a loaded buffer.
1141		Actually, the buffer isn't completely deleted, it is removed
1142		from the buffer list |unlisted-buffer| and option values,
1143		variables and mappings/abbreviations for the buffer are
1144		cleared. Examples: >
1145		    :.,$-bdelete    " delete buffers from the current one to
1146				    " last but one
1147		    :%bdelete	    " delete all buffers
1148<
1149
1150:bdelete[!] {bufname}						*E93* *E94*
1151		Like ":bdelete[!] [N]", but buffer given by name, see
1152		|{bufname}|.
1153
1154:bdelete[!] N1 N2 ...
1155		Do ":bdelete[!]" for buffer N1, N2, etc.  The arguments can be
1156		buffer numbers or buffer names (but not buffer names that are
1157		a number).  Insert a backslash before a space in a buffer
1158		name.
1159
1160:N,Mbdelete[!]	Do ":bdelete[!]" for all buffers in the range N to M
1161		|inclusive|.
1162
1163:[N]bw[ipeout][!]			*:bw* *:bwipe* *:bwipeout* *E517*
1164:bw[ipeout][!] {bufname}
1165:N,Mbw[ipeout][!]
1166:bw[ipeout][!] N1 N2 ...
1167		Like |:bdelete|, but really delete the buffer.  Everything
1168		related to the buffer is lost.  All marks in this buffer
1169		become invalid, option settings are lost, etc.  Don't use this
1170		unless you know what you are doing. Examples: >
1171		    :.+,$bwipeout   " wipe out all buffers after the current
1172				    " one
1173		    :%bwipeout	    " wipe out all buffers
1174<
1175
1176:[N]bun[load][!]				*:bun* *:bunload* *E515*
1177:bun[load][!] [N]
1178		Unload buffer [N] (default: current buffer).  The memory
1179		allocated for this buffer will be freed.  The buffer remains
1180		in the buffer list.
1181		If the buffer was changed, this fails, unless when [!] is
1182		specified, in which case the changes are lost.
1183		Any windows for this buffer are closed.  If buffer [N] is the
1184		current buffer, another buffer will be displayed instead.
1185		This is the most recent entry in the jump list that points
1186		into a loaded buffer.
1187
1188:bunload[!] {bufname}
1189		Like ":bunload[!] [N]", but buffer given by name.
1190		Also see |{bufname}|.
1191
1192:N,Mbunload[!]	Do ":bunload[!]" for all buffers in the range N to M
1193		|inclusive|.
1194
1195:bunload[!] N1 N2 ...
1196		Do ":bunload[!]" for buffer N1, N2, etc.  The arguments can be
1197		buffer numbers or buffer names (but not buffer names that are
1198		a number).  Insert a backslash before a space in a buffer
1199		name.
1200
1201:[N]b[uffer][!] [+cmd] [N]		*:b* *:bu* *:buf* *:buffer* *E86*
1202		Edit buffer [N] from the buffer list.  If [N] is not given,
1203		the current buffer remains being edited.  See |:buffer-!| for
1204		[!].  This will also edit a buffer that is not in the buffer
1205		list, without setting the 'buflisted' flag.
1206		Also see |+cmd|.
1207
1208:[N]b[uffer][!] [+cmd] {bufname}				*{bufname}*
1209		Edit buffer for {bufname} from the buffer list.  A partial
1210		name also works, so long as it is unique in the list of
1211		buffers.
1212		Note that a buffer whose name is a number cannot be referenced
1213		by that name; use the buffer number instead.
1214		Insert a backslash before a space in a buffer name.
1215		See |:buffer-!| for [!].
1216		This will also edit a buffer that is not in the buffer list,
1217		without setting the 'buflisted' flag.
1218		Also see |+cmd|.
1219
1220:[N]sb[uffer] [+cmd] [N]				*:sb* *:sbuffer*
1221		Split window and edit buffer [N] from the buffer list.  If [N]
1222		is not given, the current buffer is edited.  Respects the
1223		"useopen" setting of 'switchbuf' when splitting.  This will
1224		also edit a buffer that is not in the buffer list, without
1225		setting the 'buflisted' flag.
1226		Also see |+cmd|.
1227
1228:[N]sb[uffer] [+cmd] {bufname}
1229		Split window and edit buffer for |{bufname}| from the buffer
1230		list.  This will also edit a buffer that is not in the buffer
1231		list, without setting the 'buflisted' flag.
1232		Note: If what you want to do is split the buffer, make a copy
1233		under another name, you can do it this way: >
1234			:w foobar | sp #
1235<		Also see |+cmd|.
1236
1237:[N]bn[ext][!] [+cmd] [N]				*:bn* *:bnext* *E87*
1238		Go to [N]th next buffer in buffer list.  [N] defaults to one.
1239		Wraps around the end of the buffer list.
1240		See |:buffer-!| for [!].
1241		Also see |+cmd|.
1242		If you are in a help buffer, this takes you to the next help
1243		buffer (if there is one).  Similarly, if you are in a normal
1244		(non-help) buffer, this takes you to the next normal buffer.
1245		This is so that if you have invoked help, it doesn't get in
1246		the way when you're browsing code/text buffers.  The next three
1247		commands also work like this.
1248
1249							*:sbn* *:sbnext*
1250:[N]sbn[ext] [+cmd] [N]
1251		Split window and go to [N]th next buffer in buffer list.
1252		Wraps around the end of the buffer list.  Uses 'switchbuf'
1253		Also see |+cmd|.
1254
1255:[N]bN[ext][!] [+cmd] [N]		*:bN* *:bNext* *:bp* *:bprevious* *E88*
1256:[N]bp[revious][!] [+cmd] [N]
1257		Go to [N]th previous buffer in buffer list.  [N] defaults to
1258		one.  Wraps around the start of the buffer list.
1259		See |:buffer-!| for [!] and 'switchbuf'.
1260		Also see |+cmd|.
1261
1262:[N]sbN[ext] [+cmd] [N]			*:sbN* *:sbNext* *:sbp* *:sbprevious*
1263:[N]sbp[revious] [+cmd] [N]
1264		Split window and go to [N]th previous buffer in buffer list.
1265		Wraps around the start of the buffer list.
1266		Uses 'switchbuf'.
1267		Also see |+cmd|.
1268
1269:br[ewind][!] [+cmd]					*:br* *:bre* *:brewind*
1270		Go to first buffer in buffer list.  If the buffer list is
1271		empty, go to the first unlisted buffer.
1272		See |:buffer-!| for [!].
1273
1274:bf[irst] [+cmd]					*:bf* *:bfirst*
1275		Same as |:brewind|.
1276		Also see |+cmd|.
1277
1278:sbr[ewind] [+cmd]					*:sbr* *:sbrewind*
1279		Split window and go to first buffer in buffer list.  If the
1280		buffer list is empty, go to the first unlisted buffer.
1281		Respects the 'switchbuf' option.
1282		Also see |+cmd|.
1283
1284:sbf[irst] [+cmd]					*:sbf* *:sbfirst*
1285		Same as ":sbrewind".
1286
1287:bl[ast][!] [+cmd]					*:bl* *:blast*
1288		Go to last buffer in buffer list.  If the buffer list is
1289		empty, go to the last unlisted buffer.
1290		See |:buffer-!| for [!].
1291
1292:sbl[ast] [+cmd]					*:sbl* *:sblast*
1293		Split window and go to last buffer in buffer list.  If the
1294		buffer list is empty, go to the last unlisted buffer.
1295		Respects 'switchbuf' option.
1296
1297:[N]bm[odified][!] [+cmd] [N]			*:bm* *:bmodified* *E84*
1298		Go to [N]th next modified buffer.  Note: this command also
1299		finds unlisted buffers.  If there is no modified buffer the
1300		command fails.
1301
1302:[N]sbm[odified] [+cmd] [N]				*:sbm* *:sbmodified*
1303		Split window and go to [N]th next modified buffer.
1304		Respects 'switchbuf' option.
1305		Note: this command also finds buffers not in the buffer list.
1306
1307:[N]unh[ide] [N]			*:unh* *:unhide* *:sun* *:sunhide*
1308:[N]sun[hide] [N]
1309		Rearrange the screen to open one window for each loaded buffer
1310		in the buffer list.  When a count is given, this is the
1311		maximum number of windows to open.
1312
1313:[N]ba[ll] [N]					*:ba* *:ball* *:sba* *:sball*
1314:[N]sba[ll] [N]	Rearrange the screen to open one window for each buffer in
1315		the buffer list.  When a count is given, this is the maximum
1316		number of windows to open.  'winheight' also limits the number
1317		of windows opened ('winwidth' if |:vertical| was prepended).
1318		Buf/Win Enter/Leave autocommands are not executed for the new
1319		windows here, that's only done when they are really entered.
1320		When the |:tab| modifier is used new windows are opened in a
1321		new tab, up to 'tabpagemax'.
1322
1323Note: All the commands above that start editing another buffer, keep the
1324'readonly' flag as it was.  This differs from the ":edit" command, which sets
1325the 'readonly' flag each time the file is read.
1326
1327==============================================================================
132812. Special kinds of buffers			*special-buffers*
1329
1330Instead of containing the text of a file, buffers can also be used for other
1331purposes.  A few options can be set to change the behavior of a buffer:
1332	'bufhidden'	what happens when the buffer is no longer displayed
1333			in a window.
1334	'buftype'	what kind of a buffer this is
1335	'swapfile'	whether the buffer will have a swap file
1336	'buflisted'	buffer shows up in the buffer list
1337
1338A few useful kinds of a buffer:
1339
1340quickfix	Used to contain the error list or the location list.  See
1341		|:cwindow| and |:lwindow|.  This command sets the 'buftype'
1342		option to "quickfix".  You are not supposed to change this!
1343		'swapfile' is off.
1344
1345help		Contains a help file.  Will only be created with the |:help|
1346		command.  The flag that indicates a help buffer is internal
1347		and can't be changed.  The 'buflisted' option will be reset
1348		for a help buffer.
1349
1350terminal	A terminal window buffer, see |terminal|. The contents cannot
1351		be read or changed until the job ends.
1352
1353directory	Displays directory contents.  Can be used by a file explorer
1354		plugin.  The buffer is created with these settings: >
1355			:setlocal buftype=nowrite
1356			:setlocal bufhidden=delete
1357			:setlocal noswapfile
1358<		The buffer name is the name of the directory and is adjusted
1359		when using the |:cd| command.
1360
1361						*scratch-buffer*
1362scratch		Contains text that can be discarded at any time.  It is kept
1363		when closing the window, it must be deleted explicitly.
1364		Settings: >
1365			:setlocal buftype=nofile
1366			:setlocal bufhidden=hide
1367			:setlocal noswapfile
1368<		The buffer name can be used to identify the buffer, if you
1369		give it a meaningful name.
1370
1371						*unlisted-buffer*
1372unlisted	The buffer is not in the buffer list.  It is not used for
1373		normal editing, but to show a help file, remember a file name
1374		or marks.  The ":bdelete" command will also set this option,
1375		thus it doesn't completely delete the buffer.  Settings: >
1376			:setlocal nobuflisted
1377<
1378
1379 vim:tw=78:ts=8:noet:ft=help:norl:
1380