blob: 69de9bafe6c25d116aab7d3e568dc79cc4b10533 [file] [log] [blame]
Bram Moolenaar942db232021-02-13 18:14:48 +01001*windows.txt* For Vim version 8.2. Last change: 2021 Feb 06
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
Bram Moolenaar071d4272004-06-13 20:20:40 +000029{not able to use multiple windows when the |+windows| feature was disabled at
30compile time}
Bram Moolenaar071d4272004-06-13 20:20:40 +000031
32==============================================================================
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000331. Introduction *windows-intro* *window*
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010035Summary:
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
Bram Moolenaar071d4272004-06-13 20:20:40 +000040A 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
Bram Moolenaar7e8fd632006-02-18 22:14:51 +000073The main Vim window can hold several split windows. There are also tab pages
74|tab-page|, each of which can hold multiple windows.
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +020075 *window-ID* *winid* *windowid*
Bram Moolenaarc95a3022016-06-12 23:01:46 +020076Each 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()|.
Bram Moolenaarba3ff532018-11-04 14:45:49 +010081The 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.
Bram Moolenaarc95a3022016-06-12 23:01:46 +020085
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
Bram Moolenaar071d4272004-06-13 20:20:40 +000090==============================================================================
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.
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000123This option can be local to the window, so that you can have a different
124status line in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125
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
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200140 *filler-lines*
Bram Moolenaara98f8a22021-02-13 18:24:23 +0100141The 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.
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200147
Bram Moolenaar071d4272004-06-13 20:20:40 +0000148==============================================================================
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*
Bram Moolenaar7b449342014-03-25 13:03:48 +0100154:[N]sp[lit] [++opt] [+cmd] [file] *:sp* *:split*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155 Split current window in two. The result is two viewports on
Bram Moolenaar7b449342014-03-25 13:03:48 +0100156 the same file.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100157
Bram Moolenaar7b449342014-03-25 13:03:48 +0100158 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168 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|.
Bram Moolenaar54775062019-07-31 21:07:14 +0200171 *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.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000175
176CTRL-W CTRL-V *CTRL-W_CTRL-V*
177CTRL-W v *CTRL-W_v*
178:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
Bram Moolenaar67f71312007-08-12 14:55:56 +0000179 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
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +0000184 4. one of the other windows is wider than the current or new
Bram Moolenaar67f71312007-08-12 14:55:56 +0000185 window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 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
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200207 This behaves like a ":split" first, and then an ":enew"
208 command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210:[N]new [++opt] [+cmd] {file}
211:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200212 Create a new window and start editing file {file} in it. This
Bram Moolenaar942db232021-02-13 18:14:48 +0100213 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}.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216 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
Bram Moolenaar4072ba52020-12-23 13:56:35 +0100223:[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
Bram Moolenaarff781552020-03-19 20:37:11 +0100228:[N]sv[iew] [++opt] [+cmd] [file] *:sv* *:sview* *splitview*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229 Same as ":split", but set 'readonly' option for this buffer.
230
Bram Moolenaar61da1bf2019-06-06 12:14:49 +0200231:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfi* *:sfind* *splitfind*
Bram Moolenaarc236c162008-07-13 17:41:49 +0000232 Same as ":split", but search for {file} in 'path' like in
233 |:find|. Doesn't split if {file} is not found.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000234
235CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
Bram Moolenaar1bbb6192018-11-10 16:02:01 +0100236CTRL-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.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200242 *CTRL-W_:*
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200243CTRL-W : Does the same as typing |:| - enter a command line. Useful in a
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200244 terminal window, where all Vim commands must be preceded with
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200245 CTRL-W or 'termwinkey'.
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200246
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247Note 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.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000254 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255
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'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000262 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263
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'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000270 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271
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.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000278 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200280 *:bo* *:botright*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281: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.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000286 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287
288These command modifiers can be combined to make a vertically split window
289occupy the full height. Example: >
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200290 :vertical topleft split tags
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291Opens 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
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100298:q[uit]
299:{count}q[uit]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000300CTRL-W q *CTRL-W_q*
301CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100302 Without {count}: Quit the current window. If {count} is
303 given quit the {count} window.
Bram Moolenaar47e13952020-05-12 22:49:12 +0200304 *edit-window*
305 When quitting the last edit window (not counting help or
306 preview windows), exit Vim.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100307
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308 When 'hidden' is set, and there is only one window for the
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100309 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.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100312
Bram Moolenaared32d942014-12-06 23:33:00 +0100313 (Note: CTRL-Q does not work on all terminals).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100314
Bram Moolenaared32d942014-12-06 23:33:00 +0100315 If [count] is greater than the last window number the last
316 window will be closed: >
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100317 :1quit " quit the first window
318 :$quit " quit the last window
319 :9quit " quit the last window
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200320 " if there are fewer than 9 windows opened
321 :-quit " quit the previous window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100322 :+quit " quit the next window
Bram Moolenaared32d942014-12-06 23:33:00 +0100323 :+2quit " quit the second next window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100324<
Bram Moolenaar47e13952020-05-12 22:49:12 +0200325 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|.
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200328
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100329:q[uit]!
330:{count}q[uit]!
331 Without {count}: Quit the current window. If {count} is
332 given quit the {count} window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000333
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100334 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.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000338
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100339:clo[se][!]
340:{count}clo[se][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341CTRL-W c *CTRL-W_c* *:clo* *:close*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100342 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).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100348
Bram Moolenaar47e13952020-05-12 22:49:12 +0200349 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|.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100352
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353 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*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100366:hid[e]
367:{count}hid[e]
Bram Moolenaarc572da52017-08-27 16:52:01 +0200368 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.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100371
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100372 The buffer becomes hidden (unless there is another window
Bram Moolenaared32d942014-12-06 23:33:00 +0100373 editing it or 'bufhidden' is "unload", "delete" or "wipe").
374 If the window is the last one in the current tab page the tab
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100375 page is closed. |tab-page|
376
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100377 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.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000380
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
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100388:on[ly][!]
389:{count}on[ly][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000390CTRL-W o *CTRL-W_o* *E445*
391CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100392 Make the current window the only one on the screen. All other
393 windows are closed. For {count} see |:quit| command.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100394
Bram Moolenaar071d4272004-06-13 20:20:40 +0000395 When the 'hidden' option is set, all buffers in closed windows
396 become hidden.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100397
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398 When 'hidden' is not set, and the 'autowrite' option is set,
399 modified buffers are written. Otherwise, windows that have
400 buffers that are modified are not removed, unless the [!] is
401 given, then they become hidden. But modified buffers are
402 never abandoned, so changes cannot get lost.
403
404==============================================================================
4054. Moving cursor to other windows *window-move-cursor*
406
407CTRL-W <Down> *CTRL-W_<Down>*
408CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
409CTRL-W j Move cursor to Nth window below current one. Uses the cursor
410 position to select between alternatives.
411
412CTRL-W <Up> *CTRL-W_<Up>*
413CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
414CTRL-W k Move cursor to Nth window above current one. Uses the cursor
415 position to select between alternatives.
416
417CTRL-W <Left> *CTRL-W_<Left>*
418CTRL-W CTRL-H *CTRL-W_CTRL-H*
419CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
420CTRL-W h Move cursor to Nth window left of current one. Uses the
421 cursor position to select between alternatives.
422
423CTRL-W <Right> *CTRL-W_<Right>*
424CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
425CTRL-W l Move cursor to Nth window right of current one. Uses the
426 cursor position to select between alternatives.
427
428CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
429CTRL-W CTRL-W Without count: move cursor to window below/right of the
430 current one. If there is no window below or right, go to
431 top-left window.
432 With count: go to Nth window (windows are numbered from
433 top-left to bottom-right). To obtain the window number see
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100434 |bufwinnr()| and |winnr()|. When N is larger than the number
435 of windows go to the last window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000436
437 *CTRL-W_W*
438CTRL-W W Without count: move cursor to window above/left of current
439 one. If there is no window above or left, go to bottom-right
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100440 window. With count: go to Nth window, like with CTRL-W w.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000441
442CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
443CTRL-W CTRL-T Move cursor to top-left window.
444
445CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
446CTRL-W CTRL-B Move cursor to bottom-right window.
447
448CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
449CTRL-W CTRL-P Go to previous (last accessed) window.
450
451 *CTRL-W_P* *E441*
452CTRL-W P Go to preview window. When there is no preview window this is
453 an error.
454 {not available when compiled without the |+quickfix| feature}
455
456If Visual mode is active and the new window is not for the same buffer, the
457Visual mode is ended. If the window is on the same buffer, the cursor
458position is set to keep the same Visual area selected.
459
460 *:winc* *:wincmd*
461These commands can also be executed with ":wincmd":
462
463:[count]winc[md] {arg}
464 Like executing CTRL-W [count] {arg}. Example: >
465 :wincmd j
466< Moves to the window below the current one.
467 This command is useful when a Normal mode cannot be used (for
468 the |CursorHold| autocommand event). Or when a Normal mode
469 command is inconvenient.
470 The count can also be a window number. Example: >
471 :exe nr . "wincmd w"
472< This goes to window "nr".
473
474==============================================================================
4755. Moving windows around *window-moving*
476
477CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
478CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
479 the second one, the second one becomes the third one, etc.
480 The last window becomes the first window. The cursor remains
481 in the same window.
482 This only works within the row or column of windows that the
483 current window is in.
484
485 *CTRL-W_R*
486CTRL-W R Rotate windows upwards/leftwards. The second window becomes
487 the first one, the third one becomes the second one, etc. The
488 first window becomes the last window. The cursor remains in
489 the same window.
490 This only works within the row or column of windows that the
491 current window is in.
492
493CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
494CTRL-W CTRL-X Without count: Exchange current window with next one. If there
495 is no next window, exchange with previous window.
496 With count: Exchange current window with Nth window (first
497 window is 1). The cursor is put in the other window.
498 When vertical and horizontal window splits are mixed, the
499 exchange is only done in the row or column of windows that the
500 current window is in.
501
502The following commands can be used to change the window layout. For example,
503when there are two vertically split windows, CTRL-W K will change that in
504horizontally split windows. CTRL-W H does it the other way around.
505
506 *CTRL-W_K*
507CTRL-W K Move the current window to be at the very top, using the full
508 width of the screen. This works like closing the current
509 window and then creating another one with ":topleft split",
510 except that the current window contents is used for the new
511 window.
512
513 *CTRL-W_J*
514CTRL-W J Move the current window to be at the very bottom, using the
515 full width of the screen. This works like closing the current
516 window and then creating another one with ":botright split",
517 except that the current window contents is used for the new
518 window.
519
520 *CTRL-W_H*
521CTRL-W H Move the current window to be at the far left, using the
522 full height of the screen. This works like closing the
523 current window and then creating another one with
524 ":vert topleft split", except that the current window contents
525 is used for the new window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526
527 *CTRL-W_L*
528CTRL-W L Move the current window to be at the far right, using the full
529 height of the screen. This works like closing the
530 current window and then creating another one with
531 ":vert botright split", except that the current window
532 contents is used for the new window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000533
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000534 *CTRL-W_T*
535CTRL-W T Move the current window to a new tab page. This fails if
536 there is only one window in the current tab page.
537 When a count is specified the new tab page will be opened
538 before the tab page with this index. Otherwise it comes after
539 the current tab page.
540
Bram Moolenaar071d4272004-06-13 20:20:40 +0000541==============================================================================
5426. Window resizing *window-resize*
543
544 *CTRL-W_=*
545CTRL-W = Make all windows (almost) equally high and wide, but use
546 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000547 Windows with 'winfixheight' set keep their height and windows
548 with 'winfixwidth' set keep their width.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000549
550:res[ize] -N *:res* *:resize* *CTRL-W_-*
551CTRL-W - Decrease current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200552 If used after |:vertical|: decrease width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000553
554:res[ize] +N *CTRL-W_+*
555CTRL-W + Increase current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200556 If used after |:vertical|: increase width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000557
558:res[ize] [N]
559CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
560CTRL-W _ Set current window height to N (default: highest possible).
561
Bram Moolenaar1ff14ba2019-11-02 14:09:23 +0100562:{winnr}res[ize] [+-]N
563 Like `:resize` above, but apply the size to window {winnr}
564 instead of the current window.
565
Bram Moolenaar071d4272004-06-13 20:20:40 +0000566z{nr}<CR> Set current window height to {nr}.
567
568 *CTRL-W_<*
569CTRL-W < Decrease current window width by N (default 1).
570
571 *CTRL-W_>*
572CTRL-W > Increase current window width by N (default 1).
573
574:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
575CTRL-W | Set current window width to N (default: widest possible).
576
577You can also resize a window by dragging a status line up or down with the
578mouse. Or by dragging a vertical separator line left or right. This only
579works if the version of Vim that is being used supports the mouse and the
580'mouse' option has been set to enable it.
581
582The option 'winheight' ('wh') is used to set the minimal window height of the
583current window. This option is used each time another window becomes the
584current window. If the option is '0', it is disabled. Set 'winheight' to a
585very large value, e.g., '9999', to make the current window always fill all
586available space. Set it to a reasonable value, e.g., '10', to make editing in
587the current window comfortable.
588
589The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
590the current window.
591
592When the option 'equalalways' ('ea') is set, all the windows are automatically
593made the same size after splitting or closing a window. If you don't set this
594option, splitting a window will reduce the size of the current window and
595leave the other windows the same. When closing a window, the extra lines are
596given to the window above it.
597
598The 'eadirection' option limits the direction in which the 'equalalways'
599option is applied. The default "both" resizes in both directions. When the
600value is "ver" only the heights of windows are equalized. Use this when you
601have manually resized a vertically split window and want to keep this width.
602Likewise, "hor" causes only the widths of windows to be equalized.
603
604The option 'cmdheight' ('ch') is used to set the height of the command-line.
605If you are annoyed by the |hit-enter| prompt for long messages, set this
606option to 2 or 3.
607
608If there is only one window, resizing that window will also change the command
609line height. If there are several windows, resizing the current window will
610also change the height of the window below it (and sometimes the window above
611it).
612
613The minimal height and width of a window is set with 'winminheight' and
614'winminwidth'. These are hard values, a window will never become smaller.
615
616==============================================================================
6177. Argument and buffer list commands *buffer-list*
618
619 args list buffer list meaning ~
6201. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
6212. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
6223. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
6234. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
6245. :rewind / :first 15. :brewind / :bfirst to first arg/buf
6256. :last 16. :blast to last arg/buf
6267. :all 17. :ball edit all args/buffers
627 18. :unhide edit all loaded buffers
628 19. :[N]bmod [N] to Nth modified buf
629
630 split & args list split & buffer list meaning ~
63121. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
63222. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
63323. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
63424. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
63525. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
63626. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000063727. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000638 38. :sunhide edit all loaded buffers
639 39. :[N]sbmod [N] split + to Nth modified buf
640
64140. :args list of arguments
64241. :buffers list of buffers
643
644The meaning of [N] depends on the command:
Bram Moolenaar24a98a02017-09-27 22:23:55 +0200645 [N] is the number of buffers to go forward/backward on 2/12/22/32,
646 3/13/23/33, and 4/14/24/34
Bram Moolenaar071d4272004-06-13 20:20:40 +0000647 [N] is an argument number, defaulting to current argument, for 1 and 21
648 [N] is a buffer number, defaulting to current buffer, for 11 and 31
649 [N] is a count for 19 and 39
650
651Note: ":next" is an exception, because it must accept a list of file names
652for compatibility with Vi.
653
654
655The argument list and multiple windows
656--------------------------------------
657
658The current position in the argument list can be different for each window.
659Remember that when doing ":e file", the position in the argument list stays
660the same, but you are not editing the file at that position. To indicate
661this, the file message (and the title, if you have one) shows
662"(file (N) of M)", where "(N)" is the current position in the file list, and
663"M" the number of files in the file list.
664
665All the entries in the argument list are added to the buffer list. Thus, you
666can also get to them with the buffer list commands, like ":bnext".
667
668:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
669:[N]sal[l][!] [N]
670 Rearrange the screen to open one window for each argument.
671 All other windows are closed. When a count is given, this is
672 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000673 With the |:tab| modifier open a tab page for each argument.
674 When there are more arguments than 'tabpagemax' further ones
675 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000676 When the 'hidden' option is set, all buffers in closed windows
677 become hidden.
678 When 'hidden' is not set, and the 'autowrite' option is set,
679 modified buffers are written. Otherwise, windows that have
680 buffers that are modified are not removed, unless the [!] is
681 given, then they become hidden. But modified buffers are
682 never abandoned, so changes cannot get lost.
683 [N] is the maximum number of windows to open. 'winheight'
684 also limits the number of windows opened ('winwidth' if
685 |:vertical| was prepended).
686 Buf/Win Enter/Leave autocommands are not executed for the new
687 windows here, that's only done when they are really entered.
Bram Moolenaar54775062019-07-31 21:07:14 +0200688 If autocommands change the window layout while this command is
689 busy an error will be given. *E249*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000690
691:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
692 Short for ":split | argument [N]": split window and go to Nth
693 argument. But when there is no such argument, the window is
694 not split. Also see |++opt| and |+cmd|.
695
696:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
697 Short for ":split | [N]next": split window and go to Nth next
698 argument. But when there is no next file, the window is not
699 split. Also see |++opt| and |+cmd|.
700
701:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
702:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
703 Short for ":split | [N]Next": split window and go to Nth
704 previous argument. But when there is no previous file, the
705 window is not split. Also see |++opt| and |+cmd|.
706
707 *:sre* *:srewind*
708:sre[wind][!] [++opt] [+cmd]
709 Short for ":split | rewind": split window and go to first
710 argument. But when there is no argument list, the window is
711 not split. Also see |++opt| and |+cmd|.
712
713 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000714:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000715 Same as ":srewind".
716
717 *:sla* *:slast*
718:sla[st][!] [++opt] [+cmd]
719 Short for ":split | last": split window and go to last
720 argument. But when there is no argument list, the window is
721 not split. Also see |++opt| and |+cmd|.
722
723 *:dr* *:drop*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000724:dr[op] [++opt] [+cmd] {file} ..
Bram Moolenaar071d4272004-06-13 20:20:40 +0000725 Edit the first {file} in a window.
726 - If the file is already open in a window change to that
727 window.
728 - If the file is not open in a window edit the file in the
729 current window. If the current buffer can't be |abandon|ed,
730 the window is split first.
Bram Moolenaar51628222016-12-01 23:03:28 +0100731 - Windows that are not in the argument list or are not full
732 width will be closed if possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000733 The |argument-list| is set, like with the |:next| command.
734 The purpose of this command is that it can be used from a
735 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000736 When using the |:tab| modifier each argument is opened in a
737 tab page. The last window is used if it's empty.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000738 Also see |++opt| and |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000739
740==============================================================================
7418. Do a command in all buffers or windows *list-repeat*
742
743 *:windo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100744:[range]windo {cmd} Execute {cmd} in each window or if [range] is given
745 only in windows for which the window number lies in
746 the [range]. It works like doing this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000747 CTRL-W t
748 :{cmd}
749 CTRL-W w
750 :{cmd}
751 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000752< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000753 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000754 windows will not be visited.
755 The last window (or where an error occurred) becomes
756 the current window.
757 {cmd} can contain '|' to concatenate several commands.
758 {cmd} must not open or close windows or reorder them.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200759
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200760 Also see |:tabdo|, |:argdo|, |:bufdo|, |:cdo|, |:ldo|,
761 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000762
763 *:bufdo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100764:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
765 [range] is given only for buffers for which their
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100766 buffer number is in the [range]. It works like doing
Bram Moolenaara162bc52015-01-07 16:54:21 +0100767 this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000768 :bfirst
769 :{cmd}
770 :bnext
771 :{cmd}
772 etc.
773< When the current file can't be |abandon|ed and the [!]
774 is not present, the command fails.
775 When an error is detected on one buffer, further
776 buffers will not be visited.
777 Unlisted buffers are skipped.
778 The last buffer (or where an error occurred) becomes
779 the current buffer.
780 {cmd} can contain '|' to concatenate several commands.
781 {cmd} must not delete buffers or add buffers to the
782 buffer list.
783 Note: While this command is executing, the Syntax
784 autocommand event is disabled by adding it to
785 'eventignore'. This considerably speeds up editing
786 each buffer.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200787
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200788 Also see |:tabdo|, |:argdo|, |:windo|, |:cdo|, |:ldo|,
789 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000790
791Examples: >
792
793 :windo set nolist nofoldcolumn | normal zn
794
795This resets the 'list' option and disables folding in all windows. >
796
797 :bufdo set fileencoding= | update
798
799This resets the 'fileencoding' in each buffer and writes it if this changed
800the buffer. The result is that all buffers will use the 'encoding' encoding
801(if conversion works properly).
802
803==============================================================================
8049. Tag or file name under the cursor *window-tag*
805
806 *:sta* *:stag*
807:sta[g][!] [tagname]
808 Does ":tag[!] [tagname]" and splits the window for the found
809 tag. See also |:tag|.
810
811CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
812CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200813 tag and jump to it in the new upper window.
814 In Visual mode uses the Visually selected text as a tag.
815 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000816
817 *CTRL-W_g]*
818CTRL-W g ] Split current window in two. Use identifier under cursor as a
819 tag and perform ":tselect" on it in the new upper window.
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200820 In Visual mode uses the Visually selected text as a tag.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000821 Make new window N high.
822
823 *CTRL-W_g_CTRL-]*
824CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200825 tag and perform ":tjump" on it in the new upper window.
826 In Visual mode uses the Visually selected text as a tag.
827 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000828
829CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
830CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000831 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000832 exist.
833 Uses the 'path' variable as a list of directory names where to
834 look for the file. Also the path for current file is
835 used to search for the file name.
836 If the name is a hypertext link that looks like
837 "type://machine/path", only "/path" is used.
838 If a count is given, the count'th matching file is edited.
839 {not available when the |+file_in_path| feature was disabled
840 at compile time}
841
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000842CTRL-W F *CTRL-W_F*
843 Split current window in two. Edit file name under cursor and
844 jump to the line number following the file name. See |gF| for
845 details on how the line number is obtained.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000846 {not available when the |+file_in_path| feature was disabled
847 at compile time}
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000848
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000849CTRL-W gf *CTRL-W_gf*
850 Open a new tab page and edit the file name under the cursor.
851 Like "tab split" and "gf", but the new tab page isn't created
852 if the file does not exist.
853 {not available when the |+file_in_path| feature was disabled
854 at compile time}
855
Bram Moolenaar57657d82006-04-21 22:12:41 +0000856CTRL-W gF *CTRL-W_gF*
857 Open a new tab page and edit the file name under the cursor
858 and jump to the line number following the file name. Like
859 "tab split" and "gF", but the new tab page isn't created if
860 the file does not exist.
861 {not available when the |+file_in_path| feature was disabled
862 at compile time}
863
Bram Moolenaar26967612019-03-17 17:13:16 +0100864CTRL-W gt *CTRL-W_gt*
865 Go to next tab page, same as `gt`.
866
867CTRL-W gT *CTRL-W_gT*
868 Go to previous tab page, same as `gT`.
869
Bram Moolenaar071d4272004-06-13 20:20:40 +0000870Also see |CTRL-W_CTRL-I|: open window for an included file that includes
871the keyword under the cursor.
872
873==============================================================================
87410. The preview window *preview-window*
875
876The preview window is a special window to show (preview) another file. It is
877normally a small window used to show an include file or definition of a
878function.
879{not available when compiled without the |+quickfix| feature}
880
Bram Moolenaarc270d802006-03-11 21:29:41 +0000881There can be only one preview window (per tab page). It is created with one
882of the commands below. The 'previewheight' option can be set to specify the
883height of the preview window when it's opened. The 'previewwindow' option is
884set in the preview window to be able to recognize it. The 'winfixheight'
885option is set to have it keep the same height when opening/closing other
886windows.
Bram Moolenaar79648732019-07-18 21:43:07 +0200887 *preview-popup*
888Alternatively, a popup window can be used by setting the 'previewpopup'
889option. When set, it overrules the 'previewwindow' and 'previewheight'
890settings. The option is a comma separated list of values:
891 height maximum height of the popup
Bram Moolenaar85850f32019-07-19 22:05:51 +0200892 width maximum width of the popup
Bram Moolenaar06fe74a2019-08-31 16:20:32 +0200893 highlight highlight group of the popup (default is Pmenu)
Bram Moolenaar79648732019-07-18 21:43:07 +0200894Example: >
895 :set previewpopup=height:10,width:60
Bram Moolenaar2debf1c2019-08-04 20:44:19 +0200896
897A few peculiarities:
898- If the file is in a buffer already, it will be re-used. This will allow for
899 editing the file while it's visible in the popup window.
900- No ATTENTION dialog will be used, since you can't edit the file in the popup
901 window. However, if you later open the same buffer in a normal window, you
902 may not notice it's edited elsewhere. And when then using ":edit" to
903 trigger the ATTENTION and responding "A" for Abort, the preview window will
904 become empty.
905
Bram Moolenaar071d4272004-06-13 20:20:40 +0000906 *:pta* *:ptag*
907:pta[g][!] [tagname]
908 Does ":tag[!] [tagname]" and shows the found tag in a
909 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000910 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000911 (like a help window is). If a new one is opened,
912 'previewheight' is used for the height of the window. See
913 also |:tag|.
914 See below for an example. |CursorHold-example|
915 Small difference from |:tag|: When [tagname] is equal to the
916 already displayed tag, the position in the matching tag list
917 is not reset. This makes the CursorHold example work after a
918 |:ptnext|.
919
920CTRL-W z *CTRL-W_z*
921CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
922:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
923 option is set, or when the buffer was changed and the [!] is
924 used, the buffer becomes hidden (unless there is another
925 window editing it). The command fails if any "Preview" buffer
926 cannot be closed. See also |:close|.
927
928 *:pp* *:ppop*
929:[count]pp[op][!]
930 Does ":[count]pop[!]" in the preview window. See |:pop| and
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200931 |:ptag|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000932
933CTRL-W } *CTRL-W_}*
934 Use identifier under cursor as a tag and perform a :ptag on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000935 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000936 not given, 'previewheight' is used.
937
938CTRL-W g } *CTRL-W_g}*
939 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000940 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000941 not given, 'previewheight' is used.
942
943 *:ped* *:pedit*
944:ped[it][!] [++opt] [+cmd] {file}
945 Edit {file} in the preview window. The preview window is
946 opened like with |:ptag|. The current window and cursor
947 position isn't changed. Useful example: >
948 :pedit +/fputc /usr/include/stdio.h
949<
950 *:ps* *:psearch*
951:[range]ps[earch][!] [count] [/]pattern[/]
952 Works like |:ijump| but shows the found match in the preview
953 window. The preview window is opened like with |:ptag|. The
954 current window and cursor position isn't changed. Useful
955 example: >
956 :psearch popen
957< Like with the |:ptag| command, you can use this to
958 automatically show information about the word under the
959 cursor. This is less clever than using |:ptag|, but you don't
960 need a tags file and it will also find matches in system
961 include files. Example: >
Bram Moolenaar1c6737b2020-09-07 22:18:52 +0200962 :au! CursorHold *.[ch] ++nested exe "silent! psearch " . expand("<cword>")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000963< Warning: This can be slow.
964
965Example *CursorHold-example* >
966
Bram Moolenaar1c6737b2020-09-07 22:18:52 +0200967 :au! CursorHold *.[ch] ++nested exe "silent! ptag " . expand("<cword>")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000968
969This will cause a ":ptag" to be executed for the keyword under the cursor,
970when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
971makes other autocommands be executed, so that syntax highlighting works in the
972preview window. The "silent!" avoids an error message when the tag could not
973be found. Also see |CursorHold|. To disable this again: >
974
975 :au! CursorHold
976
977A nice addition is to highlight the found tag, avoid the ":ptag" when there
978is no word under the cursor, and a few other things: >
979
Bram Moolenaar1c6737b2020-09-07 22:18:52 +0200980 :au! CursorHold *.[ch] ++nested call PreviewWord()
Bram Moolenaar071d4272004-06-13 20:20:40 +0000981 :func PreviewWord()
982 : if &previewwindow " don't do this in the preview window
983 : return
984 : endif
985 : let w = expand("<cword>") " get the word under cursor
986 : if w =~ '\a' " if the word contains a letter
987 :
988 : " Delete any existing highlight before showing another tag
989 : silent! wincmd P " jump to preview window
990 : if &previewwindow " if we really get there...
991 : match none " delete existing highlight
992 : wincmd p " back to old window
993 : endif
994 :
995 : " Try displaying a matching tag for the word under the cursor
996 : try
997 : exe "ptag " . w
998 : catch
999 : return
1000 : endtry
1001 :
1002 : silent! wincmd P " jump to preview window
1003 : if &previewwindow " if we really get there...
1004 : if has("folding")
1005 : silent! .foldopen " don't want a closed fold
1006 : endif
1007 : call search("$", "b") " to end of previous line
1008 : let w = substitute(w, '\\', '\\\\', "")
1009 : call search('\<\V' . w . '\>') " position cursor on match
1010 : " Add a match highlight to the word at this position
1011 : hi previewWord term=bold ctermbg=green guibg=green
1012 : exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
1013 : wincmd p " back to old window
1014 : endif
1015 : endif
1016 :endfun
1017
1018==============================================================================
101911. Using hidden buffers *buffer-hidden*
1020
1021A hidden buffer is not displayed in a window, but is still loaded into memory.
1022This makes it possible to jump from file to file, without the need to read or
1023write the file every time you get another buffer in a window.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001024
1025 *:buffer-!*
1026If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
1027commands that start editing another file: ":edit", ":next", ":tag", etc. The
1028commands that move through the buffer list sometimes make the current buffer
1029hidden although the 'hidden' option is not set. This happens when a buffer is
1030modified, but is forced (with '!') to be removed from a window, and
1031'autowrite' is off or the buffer can't be written.
1032
1033You can make a hidden buffer not hidden by starting to edit it with any
1034command. Or by deleting it with the ":bdelete" command.
1035
1036The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
1037can be used to make an exception for a specific buffer. It can take these
1038values:
1039 <empty> Use the value of 'hidden'.
1040 hide Hide this buffer, also when 'hidden' is not set.
1041 unload Don't hide but unload this buffer, also when 'hidden'
1042 is set.
1043 delete Delete the buffer.
1044
1045 *hidden-quit*
1046When you try to quit Vim while there is a hidden, modified buffer, you will
1047get an error message and Vim will make that buffer the current buffer. You
1048can then decide to write this buffer (":wq") or quit without writing (":q!").
1049Be careful: there may be more hidden, modified buffers!
1050
1051A buffer can also be unlisted. This means it exists, but it is not in the
1052list of buffers. |unlisted-buffer|
1053
1054
Bram Moolenaard51cb702015-07-21 15:03:06 +02001055:files[!] [flags] *:files*
1056:buffers[!] [flags] *:buffers* *:ls*
1057:ls[!] [flags]
1058 Show all buffers. Example:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001059
Bram Moolenaar97d62492012-11-15 21:28:22 +01001060 1 #h "/test/text" line 1 ~
1061 2u "asdf" line 0 ~
1062 3 %a + "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +00001063
1064 When the [!] is included the list will show unlisted buffers
1065 (the term "unlisted" is a bit confusing then...).
1066
1067 Each buffer has a unique number. That number will not change,
Bram Moolenaar0122c402015-02-03 19:13:34 +01001068 thus you can always go to a specific buffer with ":buffer N"
1069 or "N CTRL-^", where N is the buffer number.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001070
Bram Moolenaarc6896e22019-05-30 22:32:34 +02001071 For the file name these special values are used:
1072 [Prompt] |prompt-buffer|
1073 [Popup] buffer of a |popup-window|
1074 [Scratch] 'buftype' is "nofile"
1075 [No Name] no file name specified
1076 For a |terminal-window| buffer the status is used.
1077
Bram Moolenaar071d4272004-06-13 20:20:40 +00001078 Indicators (chars in the same column are mutually exclusive):
1079 u an unlisted buffer (only displayed when [!] is used)
1080 |unlisted-buffer|
1081 % the buffer in the current window
1082 # the alternate buffer for ":e #" and CTRL-^
1083 a an active buffer: it is loaded and visible
1084 h a hidden buffer: It is loaded, but currently not
1085 displayed in a window |hidden-buffer|
1086 - a buffer with 'modifiable' off
1087 = a readonly buffer
Bram Moolenaarc572da52017-08-27 16:52:01 +02001088 R a terminal buffer with a running job
1089 F a terminal buffer with a finished job
Bram Moolenaar37c64c72017-09-19 22:06:03 +02001090 ? a terminal buffer without a job: `:terminal NONE`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001091 + a modified buffer
1092 x a buffer with read errors
1093
Bram Moolenaard51cb702015-07-21 15:03:06 +02001094 [flags] can be a combination of the following characters,
1095 which restrict the buffers to be listed:
1096 + modified buffers
1097 - buffers with 'modifiable' off
1098 = readonly buffers
1099 a active buffers
Bram Moolenaare392eb42015-11-19 20:38:09 +01001100 u unlisted buffers (overrides the "!")
Bram Moolenaard51cb702015-07-21 15:03:06 +02001101 h hidden buffers
1102 x buffers with a read error
1103 % current buffer
1104 # alternate buffer
Bram Moolenaar0751f512018-03-29 16:37:16 +02001105 R terminal buffers with a running job
1106 F terminal buffers with a finished job
1107 ? terminal buffers without a job: `:terminal NONE`
Bram Moolenaar52410572019-10-27 05:12:45 +01001108 t show time last used and sort buffers
Bram Moolenaard51cb702015-07-21 15:03:06 +02001109 Combining flags means they are "and"ed together, e.g.:
1110 h+ hidden buffers which are modified
1111 a+ active buffers which are modified
1112
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +02001113 When using |:filter| the pattern is matched against the
1114 displayed buffer name, e.g.: >
1115 filter /\.vim/ ls
1116<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001117 *:bad* *:badd*
1118:bad[d] [+lnum] {fname}
Bram Moolenaar3d1cde82020-08-15 18:55:18 +02001119 Add file name {fname} to the buffer list, without loading it,
1120 if it wasn't listed yet. If the buffer was previously
1121 deleted, not wiped, it will be made listed again.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001122 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001123 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +00001124 commands after the + will be ignored.
1125
Bram Moolenaar59d8e562020-11-07 18:41:10 +01001126 *:balt*
1127:balt [+lnum] {fname}
1128 Like `:badd` and also set the alternate file for the current
1129 window to {fname}.
1130
Bram Moolenaar071d4272004-06-13 20:20:40 +00001131:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
1132:bd[elete][!] [N]
1133 Unload buffer [N] (default: current buffer) and delete it from
1134 the buffer list. If the buffer was changed, this fails,
1135 unless when [!] is specified, in which case changes are lost.
1136 The file remains unaffected. Any windows for this buffer are
1137 closed. If buffer [N] is the current buffer, another buffer
1138 will be displayed instead. This is the most recent entry in
1139 the jump list that points into a loaded buffer.
1140 Actually, the buffer isn't completely deleted, it is removed
1141 from the buffer list |unlisted-buffer| and option values,
1142 variables and mappings/abbreviations for the buffer are
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001143 cleared. Examples: >
1144 :.,$-bdelete " delete buffers from the current one to
1145 " last but one
1146 :%bdelete " delete all buffers
1147<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001148
1149:bdelete[!] {bufname} *E93* *E94*
Bram Moolenaar15142e22018-04-30 22:19:58 +02001150 Like ":bdelete[!] [N]", but buffer given by name, see
1151 |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152
1153:bdelete[!] N1 N2 ...
1154 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
1155 buffer numbers or buffer names (but not buffer names that are
1156 a number). Insert a backslash before a space in a buffer
1157 name.
1158
1159:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
1160 |inclusive|.
1161
1162:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
1163:bw[ipeout][!] {bufname}
1164:N,Mbw[ipeout][!]
1165:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00001166 Like |:bdelete|, but really delete the buffer. Everything
1167 related to the buffer is lost. All marks in this buffer
1168 become invalid, option settings are lost, etc. Don't use this
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001169 unless you know what you are doing. Examples: >
1170 :.+,$bwipeout " wipe out all buffers after the current
1171 " one
1172 :%bwipeout " wipe out all buffers
1173<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001174
1175:[N]bun[load][!] *:bun* *:bunload* *E515*
1176:bun[load][!] [N]
1177 Unload buffer [N] (default: current buffer). The memory
1178 allocated for this buffer will be freed. The buffer remains
1179 in the buffer list.
1180 If the buffer was changed, this fails, unless when [!] is
1181 specified, in which case the changes are lost.
1182 Any windows for this buffer are closed. If buffer [N] is the
1183 current buffer, another buffer will be displayed instead.
1184 This is the most recent entry in the jump list that points
1185 into a loaded buffer.
1186
1187:bunload[!] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001188 Like ":bunload[!] [N]", but buffer given by name.
1189 Also see |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001190
1191:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1192 |inclusive|.
1193
1194:bunload[!] N1 N2 ...
1195 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1196 buffer numbers or buffer names (but not buffer names that are
1197 a number). Insert a backslash before a space in a buffer
1198 name.
1199
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001200:[N]b[uffer][!] [+cmd] [N] *:b* *:bu* *:buf* *:buffer* *E86*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001201 Edit buffer [N] from the buffer list. If [N] is not given,
1202 the current buffer remains being edited. See |:buffer-!| for
1203 [!]. This will also edit a buffer that is not in the buffer
1204 list, without setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001205 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001206
Bram Moolenaar15142e22018-04-30 22:19:58 +02001207:[N]b[uffer][!] [+cmd] {bufname} *{bufname}*
1208 Edit buffer for {bufname} from the buffer list. A partial
1209 name also works, so long as it is unique in the list of
1210 buffers.
1211 Note that a buffer whose name is a number cannot be referenced
1212 by that name; use the buffer number instead.
1213 Insert a backslash before a space in a buffer name.
1214 See |:buffer-!| for [!].
1215 This will also edit a buffer that is not in the buffer list,
1216 without setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001217 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001218
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001219:[N]sb[uffer] [+cmd] [N] *:sb* *:sbuffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001220 Split window and edit buffer [N] from the buffer list. If [N]
1221 is not given, the current buffer is edited. Respects the
1222 "useopen" setting of 'switchbuf' when splitting. This will
1223 also edit a buffer that is not in the buffer list, without
1224 setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001225 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001226
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001227:[N]sb[uffer] [+cmd] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001228 Split window and edit buffer for |{bufname}| from the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001229 list. This will also edit a buffer that is not in the buffer
1230 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001231 Note: If what you want to do is split the buffer, make a copy
1232 under another name, you can do it this way: >
1233 :w foobar | sp #
Bram Moolenaar12969c02015-09-08 23:36:10 +02001234< Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001235
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001236:[N]bn[ext][!] [+cmd] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001237 Go to [N]th next buffer in buffer list. [N] defaults to one.
1238 Wraps around the end of the buffer list.
1239 See |:buffer-!| for [!].
Bram Moolenaar12969c02015-09-08 23:36:10 +02001240 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001241 If you are in a help buffer, this takes you to the next help
1242 buffer (if there is one). Similarly, if you are in a normal
1243 (non-help) buffer, this takes you to the next normal buffer.
1244 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001245 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001246 commands also work like this.
1247
1248 *:sbn* *:sbnext*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001249:[N]sbn[ext] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001250 Split window and go to [N]th next buffer in buffer list.
1251 Wraps around the end of the buffer list. Uses 'switchbuf'
Bram Moolenaar12969c02015-09-08 23:36:10 +02001252 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001253
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001254:[N]bN[ext][!] [+cmd] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1255:[N]bp[revious][!] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001256 Go to [N]th previous buffer in buffer list. [N] defaults to
1257 one. Wraps around the start of the buffer list.
1258 See |:buffer-!| for [!] and 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001259 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001260
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001261:[N]sbN[ext] [+cmd] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1262:[N]sbp[revious] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001263 Split window and go to [N]th previous buffer in buffer list.
1264 Wraps around the start of the buffer list.
1265 Uses 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001266 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001267
Bram Moolenaar61da1bf2019-06-06 12:14:49 +02001268:br[ewind][!] [+cmd] *:br* *:bre* *:brewind*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001269 Go to first buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001270 empty, go to the first unlisted buffer.
1271 See |:buffer-!| for [!].
1272
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001273:bf[irst] [+cmd] *:bf* *:bfirst*
1274 Same as |:brewind|.
1275 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001276
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001277:sbr[ewind] [+cmd] *:sbr* *:sbrewind*
1278 Split window and go to first buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001279 buffer list is empty, go to the first unlisted buffer.
1280 Respects the 'switchbuf' option.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001281 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001283:sbf[irst] [+cmd] *:sbf* *:sbfirst*
1284 Same as ":sbrewind".
Bram Moolenaar071d4272004-06-13 20:20:40 +00001285
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001286:bl[ast][!] [+cmd] *:bl* *:blast*
1287 Go to last buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001288 empty, go to the last unlisted buffer.
1289 See |:buffer-!| for [!].
1290
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001291:sbl[ast] [+cmd] *:sbl* *:sblast*
1292 Split window and go to last buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001293 buffer list is empty, go to the last unlisted buffer.
1294 Respects 'switchbuf' option.
1295
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001296:[N]bm[odified][!] [+cmd] [N] *:bm* *:bmodified* *E84*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001297 Go to [N]th next modified buffer. Note: this command also
1298 finds unlisted buffers. If there is no modified buffer the
1299 command fails.
1300
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001301:[N]sbm[odified] [+cmd] [N] *:sbm* *:sbmodified*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001302 Split window and go to [N]th next modified buffer.
1303 Respects 'switchbuf' option.
1304 Note: this command also finds buffers not in the buffer list.
1305
1306:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1307:[N]sun[hide] [N]
1308 Rearrange the screen to open one window for each loaded buffer
1309 in the buffer list. When a count is given, this is the
1310 maximum number of windows to open.
1311
1312:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1313:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1314 the buffer list. When a count is given, this is the maximum
1315 number of windows to open. 'winheight' also limits the number
1316 of windows opened ('winwidth' if |:vertical| was prepended).
1317 Buf/Win Enter/Leave autocommands are not executed for the new
1318 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001319 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001320 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001321
1322Note: All the commands above that start editing another buffer, keep the
1323'readonly' flag as it was. This differs from the ":edit" command, which sets
1324the 'readonly' flag each time the file is read.
1325
1326==============================================================================
132712. Special kinds of buffers *special-buffers*
1328
1329Instead of containing the text of a file, buffers can also be used for other
1330purposes. A few options can be set to change the behavior of a buffer:
1331 'bufhidden' what happens when the buffer is no longer displayed
1332 in a window.
1333 'buftype' what kind of a buffer this is
1334 'swapfile' whether the buffer will have a swap file
1335 'buflisted' buffer shows up in the buffer list
1336
1337A few useful kinds of a buffer:
1338
Bram Moolenaar280f1262006-01-30 00:14:18 +00001339quickfix Used to contain the error list or the location list. See
1340 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1341 option to "quickfix". You are not supposed to change this!
1342 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001343
1344help Contains a help file. Will only be created with the |:help|
1345 command. The flag that indicates a help buffer is internal
1346 and can't be changed. The 'buflisted' option will be reset
1347 for a help buffer.
1348
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +02001349terminal A terminal window buffer, see |terminal|. The contents cannot
1350 be read or changed until the job ends.
1351
Bram Moolenaar677ee682005-01-27 14:41:15 +00001352directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001353 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001354 :setlocal buftype=nowrite
1355 :setlocal bufhidden=delete
1356 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001357< The buffer name is the name of the directory and is adjusted
1358 when using the |:cd| command.
1359
1360scratch Contains text that can be discarded at any time. It is kept
1361 when closing the window, it must be deleted explicitly.
1362 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001363 :setlocal buftype=nofile
1364 :setlocal bufhidden=hide
1365 :setlocal noswapfile
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001366< The buffer name can be used to identify the buffer, if you
1367 give it a meaningful name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001368
1369 *unlisted-buffer*
1370unlisted The buffer is not in the buffer list. It is not used for
1371 normal editing, but to show a help file, remember a file name
1372 or marks. The ":bdelete" command will also set this option,
1373 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001374 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001375<
1376
Bram Moolenaard473c8c2018-08-11 18:00:22 +02001377 vim:tw=78:ts=8:noet:ft=help:norl: