blob: 924a932507d1d0339ef8cd418a4dbeed5022663c [file] [log] [blame]
Bram Moolenaar86b48162022-12-06 18:20:10 +00001*windows.txt* For Vim version 9.0. Last change: 2022 Nov 27
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==============================================================================
Bram Moolenaar2f0936c2022-01-08 21:51:59 +00001493. Opening and closing a window *opening-window*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150
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 Moolenaara2baa732022-02-04 16:09:54 +0000171 *E242* *E1159*
Bram Moolenaar54775062019-07-31 21:07:14 +0200172 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 Moolenaarfd999452022-08-24 18:30:14 +0100186 If N was given make the new window N columns wide, if
187 possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000188 Note: In other places CTRL-Q does the same as CTRL-V, but here
189 it doesn't!
190
191CTRL-W n *CTRL-W_n*
192CTRL-W CTRL_N *CTRL-W_CTRL-N*
193:[N]new [++opt] [+cmd] *:new*
194 Create a new window and start editing an empty file in it.
195 Make new window N high (default is to use half the existing
196 height). Reduces the current window height to create room (and
197 others, if the 'equalalways' option is set and 'eadirection'
198 isn't "hor").
199 Also see |++opt| and |+cmd|.
200 If 'fileformats' is not empty, the first format given will be
201 used for the new buffer. If 'fileformats' is empty, the
202 'fileformat' of the current buffer is used. This can be
203 overridden with the |++opt| argument.
204 Autocommands are executed in this order:
205 1. WinLeave for the current window
206 2. WinEnter for the new window
207 3. BufLeave for the current buffer
208 4. BufEnter for the new buffer
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200209 This behaves like a ":split" first, and then an ":enew"
210 command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212:[N]new [++opt] [+cmd] {file}
213:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200214 Create a new window and start editing file {file} in it. This
Bram Moolenaar942db232021-02-13 18:14:48 +0100215 behaves almost like a ":split" first, and then an ":edit"
216 command, but the alternate file name in the original window is
217 set to {file}.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218 If [+cmd] is given, execute the command when the file has been
219 loaded |+cmd|.
220 Also see |++opt|.
221 Make new window N high (default is to use half the existing
222 height). Reduces the current window height to create room
223 (and others, if the 'equalalways' option is set).
224
Bram Moolenaar4072ba52020-12-23 13:56:35 +0100225:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
226 Like |:new|, but split vertically. If 'equalalways' is set
227 and 'eadirection' isn't "ver" the windows will be spread out
228 horizontally, unless a width was specified.
229
Bram Moolenaarff781552020-03-19 20:37:11 +0100230:[N]sv[iew] [++opt] [+cmd] [file] *:sv* *:sview* *splitview*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231 Same as ":split", but set 'readonly' option for this buffer.
232
Bram Moolenaar61da1bf2019-06-06 12:14:49 +0200233:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfi* *:sfind* *splitfind*
Bram Moolenaarc236c162008-07-13 17:41:49 +0000234 Same as ":split", but search for {file} in 'path' like in
235 |:find|. Doesn't split if {file} is not found.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236
237CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
Bram Moolenaar1bbb6192018-11-10 16:02:01 +0100238CTRL-W ^ Split the current window in two and edit the alternate file.
239 When a count N is given, split the current window and edit
240 buffer N. Similar to ":sp #" and ":sp #N", but it allows the
241 other buffer to be unnamed. This command matches the behavior
242 of |CTRL-^|, except that it splits a window first.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200244 *CTRL-W_:*
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200245CTRL-W : Does the same as typing |:| - enter a command line. Useful in a
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200246 terminal window, where all Vim commands must be preceded with
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200247 CTRL-W or 'termwinkey'.
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200248
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249Note that the 'splitbelow' and 'splitright' options influence where a new
250window will appear.
Bram Moolenaar2f0936c2022-01-08 21:51:59 +0000251 *E36*
252Creating a window will fail if there is not enough room. Every window needs
253at least one screen line and column, sometimes more. Options 'winminheight'
254and 'winminwidth' are relevant.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255
256 *:vert* *:vertical*
257:vert[ical] {cmd}
258 Execute {cmd}. If it contains a command that splits a window,
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100259 it will be split vertically. For `vertical wincmd =` windows
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100260 will be equalized only vertically.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000261 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100263 *:hor* *:horizontal*
264:hor[izontal] {cmd}
265 Execute {cmd}. Currently only makes a difference for
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100266 `horizontal wincmd =`, which will equalize windows only
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100267 horizontally.
268
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269:lefta[bove] {cmd} *:lefta* *:leftabove*
270:abo[veleft] {cmd} *:abo* *:aboveleft*
271 Execute {cmd}. If it contains a command that splits a window,
272 it will be opened left (vertical split) or above (horizontal
273 split) the current window. Overrules 'splitbelow' and
274 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000275 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276
277:rightb[elow] {cmd} *:rightb* *:rightbelow*
278:bel[owright] {cmd} *:bel* *:belowright*
279 Execute {cmd}. If it contains a command that splits a window,
280 it will be opened right (vertical split) or below (horizontal
281 split) the current window. Overrules 'splitbelow' and
282 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000283 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284
285 *:topleft* *E442*
286:to[pleft] {cmd}
287 Execute {cmd}. If it contains a command that splits a window,
288 it will appear at the top and occupy the full width of the Vim
289 window. When the split is vertical the window appears at the
290 far left and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000291 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200293 *:bo* *:botright*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000294:bo[tright] {cmd}
295 Execute {cmd}. If it contains a command that splits a window,
296 it will appear at the bottom and occupy the full width of the
297 Vim window. When the split is vertical the window appears at
298 the far right and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000299 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000300
301These command modifiers can be combined to make a vertically split window
302occupy the full height. Example: >
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200303 :vertical topleft split tags
Bram Moolenaar071d4272004-06-13 20:20:40 +0000304Opens a vertically split, full-height window on the "tags" file at the far
305left of the Vim window.
306
307
308Closing a window
309----------------
310
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100311:q[uit]
Bram Moolenaar6c391a72021-09-09 21:55:11 +0200312:{count}q[uit] *:count_quit*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000313CTRL-W q *CTRL-W_q*
314CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100315 Without {count}: Quit the current window. If {count} is
316 given quit the {count} window.
Bram Moolenaar47e13952020-05-12 22:49:12 +0200317 *edit-window*
318 When quitting the last edit window (not counting help or
319 preview windows), exit Vim.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100320
Bram Moolenaar071d4272004-06-13 20:20:40 +0000321 When 'hidden' is set, and there is only one window for the
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100322 current buffer, it becomes hidden. When 'hidden' is not set,
323 and there is only one window for the current buffer, and the
324 buffer was changed, the command fails.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100325
Bram Moolenaared32d942014-12-06 23:33:00 +0100326 (Note: CTRL-Q does not work on all terminals).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100327
Bram Moolenaared32d942014-12-06 23:33:00 +0100328 If [count] is greater than the last window number the last
329 window will be closed: >
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100330 :1quit " quit the first window
331 :$quit " quit the last window
332 :9quit " quit the last window
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200333 " if there are fewer than 9 windows opened
334 :-quit " quit the previous window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100335 :+quit " quit the next window
Bram Moolenaared32d942014-12-06 23:33:00 +0100336 :+2quit " quit the second next window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100337<
Bram Moolenaar47e13952020-05-12 22:49:12 +0200338 When closing a help window, and this is not the only window,
339 Vim will try to restore the previous window layout, see
340 |:helpclose|.
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200341
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100342:q[uit]!
343:{count}q[uit]!
344 Without {count}: Quit the current window. If {count} is
345 given quit the {count} window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000346
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100347 If this was the last window for a buffer, any changes to that
348 buffer are lost. When quitting the last window (not counting
349 help windows), exit Vim. The contents of the buffer are lost,
350 even when 'hidden' is set.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100352:clo[se][!]
353:{count}clo[se][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354CTRL-W c *CTRL-W_c* *:clo* *:close*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100355 Without {count}: Close the current window. If {count} is
356 given close the {count} window.
357
358 When the 'hidden' option is set, or when the buffer was
359 changed and the [!] is used, the buffer becomes hidden (unless
360 there is another window editing it).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100361
Bram Moolenaar47e13952020-05-12 22:49:12 +0200362 When there is only one |edit-window| in the current tab page
363 and there is another tab page, this closes the current tab
364 page. |tab-page|.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100365
Bram Moolenaar071d4272004-06-13 20:20:40 +0000366 This command fails when: *E444*
367 - There is only one window on the screen.
368 - When 'hidden' is not set, [!] is not used, the buffer has
369 changes, and there is no other window on this buffer.
370 Changes to the buffer are not written and won't get lost, so
371 this is a "safe" command.
372
373CTRL-W CTRL-C *CTRL-W_CTRL-C*
374 You might have expected that CTRL-W CTRL-C closes the current
375 window, but that does not work, because the CTRL-C cancels the
376 command.
377
378 *:hide*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100379:hid[e]
380:{count}hid[e]
Bram Moolenaarc572da52017-08-27 16:52:01 +0200381 Without {count}: Quit the current window, unless it is the
382 last window on the screen.
383 If {count} is given quit the {count} window.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100384
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100385 The buffer becomes hidden (unless there is another window
Bram Moolenaared32d942014-12-06 23:33:00 +0100386 editing it or 'bufhidden' is "unload", "delete" or "wipe").
387 If the window is the last one in the current tab page the tab
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100388 page is closed. |tab-page|
389
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100390 The value of 'hidden' is irrelevant for this command. Changes
391 to the buffer are not written and won't get lost, so this is a
392 "safe" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393
394:hid[e] {cmd} Execute {cmd} with 'hidden' is set. The previous value of
395 'hidden' is restored after {cmd} has been executed.
396 Example: >
397 :hide edit Makefile
398< This will edit "Makefile", and hide the current buffer if it
399 has any changes.
400
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100401:on[ly][!]
402:{count}on[ly][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403CTRL-W o *CTRL-W_o* *E445*
404CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100405 Make the current window the only one on the screen. All other
Bram Moolenaar6c391a72021-09-09 21:55:11 +0200406 windows are closed. For {count} see the `:quit` command
407 above |:count_quit|.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100408
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409 When the 'hidden' option is set, all buffers in closed windows
410 become hidden.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100411
Bram Moolenaar071d4272004-06-13 20:20:40 +0000412 When 'hidden' is not set, and the 'autowrite' option is set,
413 modified buffers are written. Otherwise, windows that have
414 buffers that are modified are not removed, unless the [!] is
415 given, then they become hidden. But modified buffers are
416 never abandoned, so changes cannot get lost.
417
418==============================================================================
4194. Moving cursor to other windows *window-move-cursor*
420
421CTRL-W <Down> *CTRL-W_<Down>*
422CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
423CTRL-W j Move cursor to Nth window below current one. Uses the cursor
424 position to select between alternatives.
425
426CTRL-W <Up> *CTRL-W_<Up>*
427CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
428CTRL-W k Move cursor to Nth window above current one. Uses the cursor
429 position to select between alternatives.
430
431CTRL-W <Left> *CTRL-W_<Left>*
432CTRL-W CTRL-H *CTRL-W_CTRL-H*
433CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
434CTRL-W h Move cursor to Nth window left of current one. Uses the
435 cursor position to select between alternatives.
436
437CTRL-W <Right> *CTRL-W_<Right>*
438CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
439CTRL-W l Move cursor to Nth window right of current one. Uses the
440 cursor position to select between alternatives.
441
442CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
443CTRL-W CTRL-W Without count: move cursor to window below/right of the
444 current one. If there is no window below or right, go to
445 top-left window.
446 With count: go to Nth window (windows are numbered from
447 top-left to bottom-right). To obtain the window number see
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100448 |bufwinnr()| and |winnr()|. When N is larger than the number
449 of windows go to the last window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000450
451 *CTRL-W_W*
452CTRL-W W Without count: move cursor to window above/left of current
453 one. If there is no window above or left, go to bottom-right
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100454 window. With count: go to Nth window, like with CTRL-W w.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000455
456CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
457CTRL-W CTRL-T Move cursor to top-left window.
458
459CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
460CTRL-W CTRL-B Move cursor to bottom-right window.
461
462CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
463CTRL-W CTRL-P Go to previous (last accessed) window.
464
465 *CTRL-W_P* *E441*
466CTRL-W P Go to preview window. When there is no preview window this is
467 an error.
468 {not available when compiled without the |+quickfix| feature}
469
470If Visual mode is active and the new window is not for the same buffer, the
471Visual mode is ended. If the window is on the same buffer, the cursor
472position is set to keep the same Visual area selected.
473
474 *:winc* *:wincmd*
475These commands can also be executed with ":wincmd":
476
477:[count]winc[md] {arg}
478 Like executing CTRL-W [count] {arg}. Example: >
479 :wincmd j
480< Moves to the window below the current one.
481 This command is useful when a Normal mode cannot be used (for
482 the |CursorHold| autocommand event). Or when a Normal mode
483 command is inconvenient.
484 The count can also be a window number. Example: >
Bram Moolenaarc51cf032022-02-26 12:25:45 +0000485 :exe nr .. "wincmd w"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000486< This goes to window "nr".
487
488==============================================================================
4895. Moving windows around *window-moving*
490
491CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
492CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
493 the second one, the second one becomes the third one, etc.
494 The last window becomes the first window. The cursor remains
495 in the same window.
496 This only works within the row or column of windows that the
497 current window is in.
498
499 *CTRL-W_R*
500CTRL-W R Rotate windows upwards/leftwards. The second window becomes
501 the first one, the third one becomes the second one, etc. The
502 first window becomes the last window. The cursor remains in
503 the same window.
504 This only works within the row or column of windows that the
505 current window is in.
506
507CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
508CTRL-W CTRL-X Without count: Exchange current window with next one. If there
509 is no next window, exchange with previous window.
510 With count: Exchange current window with Nth window (first
511 window is 1). The cursor is put in the other window.
512 When vertical and horizontal window splits are mixed, the
513 exchange is only done in the row or column of windows that the
514 current window is in.
515
516The following commands can be used to change the window layout. For example,
517when there are two vertically split windows, CTRL-W K will change that in
518horizontally split windows. CTRL-W H does it the other way around.
519
520 *CTRL-W_K*
521CTRL-W K Move the current window to be at the very top, using the full
522 width of the screen. This works like closing the current
523 window and then creating another one with ":topleft split",
524 except that the current window contents is used for the new
525 window.
526
527 *CTRL-W_J*
528CTRL-W J Move the current window to be at the very bottom, using the
529 full width of the screen. This works like closing the current
530 window and then creating another one with ":botright split",
531 except that the current window contents is used for the new
532 window.
533
534 *CTRL-W_H*
535CTRL-W H Move the current window to be at the far left, using the
536 full height of the screen. This works like closing the
537 current window and then creating another one with
Bram Moolenaar56994d22021-04-17 16:31:09 +0200538 `:vert topleft split`, except that the current window contents
Bram Moolenaar071d4272004-06-13 20:20:40 +0000539 is used for the new window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000540
541 *CTRL-W_L*
542CTRL-W L Move the current window to be at the far right, using the full
543 height of the screen. This works like closing the
544 current window and then creating another one with
Bram Moolenaar56994d22021-04-17 16:31:09 +0200545 `:vert botright split`, except that the current window
Bram Moolenaar071d4272004-06-13 20:20:40 +0000546 contents is used for the new window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000547
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000548 *CTRL-W_T*
549CTRL-W T Move the current window to a new tab page. This fails if
550 there is only one window in the current tab page.
551 When a count is specified the new tab page will be opened
552 before the tab page with this index. Otherwise it comes after
553 the current tab page.
554
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555==============================================================================
5566. Window resizing *window-resize*
557
558 *CTRL-W_=*
559CTRL-W = Make all windows (almost) equally high and wide, but use
560 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000561 Windows with 'winfixheight' set keep their height and windows
562 with 'winfixwidth' set keep their width.
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100563 To equalize only vertically (make window equally high) use
Bram Moolenaar76db9e02022-11-09 21:21:04 +0000564 `vertical wincmd =`.
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100565 To equalize only horizontally (make window equally wide) use
Bram Moolenaar76db9e02022-11-09 21:21:04 +0000566 `horizontal wincmd =`.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000567
568:res[ize] -N *:res* *:resize* *CTRL-W_-*
569CTRL-W - Decrease current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200570 If used after |:vertical|: decrease width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000571
572:res[ize] +N *CTRL-W_+*
573CTRL-W + Increase current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200574 If used after |:vertical|: increase width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000575
576:res[ize] [N]
577CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
578CTRL-W _ Set current window height to N (default: highest possible).
579
Bram Moolenaar1ff14ba2019-11-02 14:09:23 +0100580:{winnr}res[ize] [+-]N
581 Like `:resize` above, but apply the size to window {winnr}
582 instead of the current window.
583
Bram Moolenaar071d4272004-06-13 20:20:40 +0000584z{nr}<CR> Set current window height to {nr}.
585
586 *CTRL-W_<*
587CTRL-W < Decrease current window width by N (default 1).
588
589 *CTRL-W_>*
590CTRL-W > Increase current window width by N (default 1).
591
Bram Moolenaar56994d22021-04-17 16:31:09 +0200592:vert[ical] res[ize] [N] *:vertical-resize* *CTRL-W_bar*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000593CTRL-W | Set current window width to N (default: widest possible).
594
595You can also resize a window by dragging a status line up or down with the
596mouse. Or by dragging a vertical separator line left or right. This only
597works if the version of Vim that is being used supports the mouse and the
598'mouse' option has been set to enable it.
599
600The option 'winheight' ('wh') is used to set the minimal window height of the
601current window. This option is used each time another window becomes the
602current window. If the option is '0', it is disabled. Set 'winheight' to a
603very large value, e.g., '9999', to make the current window always fill all
604available space. Set it to a reasonable value, e.g., '10', to make editing in
605the current window comfortable.
606
607The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
608the current window.
609
610When the option 'equalalways' ('ea') is set, all the windows are automatically
611made the same size after splitting or closing a window. If you don't set this
612option, splitting a window will reduce the size of the current window and
613leave the other windows the same. When closing a window, the extra lines are
614given to the window above it.
615
616The 'eadirection' option limits the direction in which the 'equalalways'
617option is applied. The default "both" resizes in both directions. When the
618value is "ver" only the heights of windows are equalized. Use this when you
619have manually resized a vertically split window and want to keep this width.
620Likewise, "hor" causes only the widths of windows to be equalized.
621
622The option 'cmdheight' ('ch') is used to set the height of the command-line.
623If you are annoyed by the |hit-enter| prompt for long messages, set this
624option to 2 or 3.
625
626If there is only one window, resizing that window will also change the command
627line height. If there are several windows, resizing the current window will
628also change the height of the window below it (and sometimes the window above
629it).
630
631The minimal height and width of a window is set with 'winminheight' and
632'winminwidth'. These are hard values, a window will never become smaller.
633
Bram Moolenaar35fc61c2022-11-22 12:40:50 +0000634
635WinScrolled and WinResized autocommands ~
636 *win-scrolled-resized*
637If you want to get notified of changes in window sizes, the |WinResized|
638autocommand event can be used.
639If you want to get notified of text in windows scrolling vertically or
640horizontally, the |WinScrolled| autocommand event can be used. This will also
641trigger in window size changes.
Bram Moolenaar86b48162022-12-06 18:20:10 +0000642Exception: the events will not be triggered when the text scrolls for
643'incsearch'.
Bram Moolenaar35fc61c2022-11-22 12:40:50 +0000644 *WinResized-event*
645The |WinResized| event is triggered after updating the display, several
646windows may have changed size then. A list of the IDs of windows that changed
647since last time is provided in the v:event.windows variable, for example:
648 [1003, 1006]
649 *WinScrolled-event*
650The |WinScrolled| event is triggered after |WinResized|, and also if a window
651was scrolled. That can be vertically (the text at the top of the window
652changed) or horizontally (when 'wrap' is off or when the first displayed part
653of the first line changes). Note that |WinScrolled| will trigger many more
654times than |WinResized|, it may slow down editing a bit.
655
656The information provided by |WinScrolled| is a dictionary for each window that
657has changes, using the window ID as the key, and a total count of the changes
658with the key "all". Example value for |v:event| (|Vim9| syntax):
659 {
zeertzjq3fc84dc2022-12-07 09:17:59 +0000660 all: {width: 0, height: 2, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
661 1003: {width: 0, height: -1, leftcol: 0, skipcol: 0, topline: 0, topfill: 0},
662 1006: {width: 0, height: 1, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
Bram Moolenaar35fc61c2022-11-22 12:40:50 +0000663 }
664
665Note that the "all" entry has the absolute values of the individual windows
666accumulated.
667
668If you need more information about what changed, or you want to "debounce" the
669events (not handle every event to avoid doing too much work), you may want to
670use the `winlayout()` and `getwininfo()` functions.
671
672|WinScrolled| and |WinResized| do not trigger when the first autocommand is
673added, only after the first scroll or resize. They may trigger when switching
674to another tab page.
675
676The commands executed are expected to not cause window size or scroll changes.
677If this happens anyway, the event will trigger again very soon. In other
678words: Just before triggering the event, the current sizes and scroll
679positions are stored and used to decide whether there was a change.
680 *E1312*
681It is not allowed to change the window layout here (split, close or move
682windows).
683
Bram Moolenaar071d4272004-06-13 20:20:40 +0000684==============================================================================
6857. Argument and buffer list commands *buffer-list*
686
687 args list buffer list meaning ~
6881. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
6892. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
6903. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
6914. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
6925. :rewind / :first 15. :brewind / :bfirst to first arg/buf
6936. :last 16. :blast to last arg/buf
6947. :all 17. :ball edit all args/buffers
695 18. :unhide edit all loaded buffers
696 19. :[N]bmod [N] to Nth modified buf
697
698 split & args list split & buffer list meaning ~
69921. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
70022. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
70123. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
70224. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
70325. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
70426. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000070527. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000706 38. :sunhide edit all loaded buffers
707 39. :[N]sbmod [N] split + to Nth modified buf
708
70940. :args list of arguments
71041. :buffers list of buffers
711
712The meaning of [N] depends on the command:
Bram Moolenaar24a98a02017-09-27 22:23:55 +0200713 [N] is the number of buffers to go forward/backward on 2/12/22/32,
714 3/13/23/33, and 4/14/24/34
Bram Moolenaar071d4272004-06-13 20:20:40 +0000715 [N] is an argument number, defaulting to current argument, for 1 and 21
716 [N] is a buffer number, defaulting to current buffer, for 11 and 31
717 [N] is a count for 19 and 39
718
719Note: ":next" is an exception, because it must accept a list of file names
720for compatibility with Vi.
721
722
723The argument list and multiple windows
724--------------------------------------
725
726The current position in the argument list can be different for each window.
727Remember that when doing ":e file", the position in the argument list stays
728the same, but you are not editing the file at that position. To indicate
729this, the file message (and the title, if you have one) shows
730"(file (N) of M)", where "(N)" is the current position in the file list, and
731"M" the number of files in the file list.
732
733All the entries in the argument list are added to the buffer list. Thus, you
734can also get to them with the buffer list commands, like ":bnext".
735
736:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
737:[N]sal[l][!] [N]
738 Rearrange the screen to open one window for each argument.
739 All other windows are closed. When a count is given, this is
740 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000741 With the |:tab| modifier open a tab page for each argument.
742 When there are more arguments than 'tabpagemax' further ones
743 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000744 When the 'hidden' option is set, all buffers in closed windows
745 become hidden.
746 When 'hidden' is not set, and the 'autowrite' option is set,
747 modified buffers are written. Otherwise, windows that have
748 buffers that are modified are not removed, unless the [!] is
749 given, then they become hidden. But modified buffers are
750 never abandoned, so changes cannot get lost.
751 [N] is the maximum number of windows to open. 'winheight'
752 also limits the number of windows opened ('winwidth' if
753 |:vertical| was prepended).
754 Buf/Win Enter/Leave autocommands are not executed for the new
755 windows here, that's only done when they are really entered.
Bram Moolenaar54775062019-07-31 21:07:14 +0200756 If autocommands change the window layout while this command is
757 busy an error will be given. *E249*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000758
759:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
760 Short for ":split | argument [N]": split window and go to Nth
761 argument. But when there is no such argument, the window is
762 not split. Also see |++opt| and |+cmd|.
763
764:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
765 Short for ":split | [N]next": split window and go to Nth next
766 argument. But when there is no next file, the window is not
767 split. Also see |++opt| and |+cmd|.
768
769:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
770:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
771 Short for ":split | [N]Next": split window and go to Nth
772 previous argument. But when there is no previous file, the
773 window is not split. Also see |++opt| and |+cmd|.
774
775 *:sre* *:srewind*
776:sre[wind][!] [++opt] [+cmd]
777 Short for ":split | rewind": split window and go to first
778 argument. But when there is no argument list, the window is
779 not split. Also see |++opt| and |+cmd|.
780
781 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000782:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000783 Same as ":srewind".
784
785 *:sla* *:slast*
786:sla[st][!] [++opt] [+cmd]
787 Short for ":split | last": split window and go to last
788 argument. But when there is no argument list, the window is
789 not split. Also see |++opt| and |+cmd|.
790
791 *:dr* *:drop*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000792:dr[op] [++opt] [+cmd] {file} ..
Bram Moolenaar071d4272004-06-13 20:20:40 +0000793 Edit the first {file} in a window.
794 - If the file is already open in a window change to that
795 window.
796 - If the file is not open in a window edit the file in the
797 current window. If the current buffer can't be |abandon|ed,
798 the window is split first.
Bram Moolenaar51628222016-12-01 23:03:28 +0100799 - Windows that are not in the argument list or are not full
800 width will be closed if possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000801 The |argument-list| is set, like with the |:next| command.
802 The purpose of this command is that it can be used from a
803 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000804 When using the |:tab| modifier each argument is opened in a
805 tab page. The last window is used if it's empty.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000806 Also see |++opt| and |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000807
808==============================================================================
8098. Do a command in all buffers or windows *list-repeat*
810
811 *:windo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100812:[range]windo {cmd} Execute {cmd} in each window or if [range] is given
813 only in windows for which the window number lies in
814 the [range]. It works like doing this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000815 CTRL-W t
816 :{cmd}
817 CTRL-W w
818 :{cmd}
819 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000820< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000821 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000822 windows will not be visited.
823 The last window (or where an error occurred) becomes
824 the current window.
825 {cmd} can contain '|' to concatenate several commands.
826 {cmd} must not open or close windows or reorder them.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200827
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200828 Also see |:tabdo|, |:argdo|, |:bufdo|, |:cdo|, |:ldo|,
829 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000830
831 *:bufdo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100832:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
833 [range] is given only for buffers for which their
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100834 buffer number is in the [range]. It works like doing
Bram Moolenaara162bc52015-01-07 16:54:21 +0100835 this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000836 :bfirst
837 :{cmd}
838 :bnext
839 :{cmd}
840 etc.
841< When the current file can't be |abandon|ed and the [!]
842 is not present, the command fails.
843 When an error is detected on one buffer, further
844 buffers will not be visited.
845 Unlisted buffers are skipped.
846 The last buffer (or where an error occurred) becomes
847 the current buffer.
848 {cmd} can contain '|' to concatenate several commands.
849 {cmd} must not delete buffers or add buffers to the
850 buffer list.
851 Note: While this command is executing, the Syntax
852 autocommand event is disabled by adding it to
853 'eventignore'. This considerably speeds up editing
854 each buffer.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200855
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200856 Also see |:tabdo|, |:argdo|, |:windo|, |:cdo|, |:ldo|,
857 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000858
859Examples: >
860
Bram Moolenaardad44732021-03-31 20:07:33 +0200861 :windo set nolist foldcolumn=0 | normal! zn
Bram Moolenaar071d4272004-06-13 20:20:40 +0000862
863This resets the 'list' option and disables folding in all windows. >
864
865 :bufdo set fileencoding= | update
866
867This resets the 'fileencoding' in each buffer and writes it if this changed
868the buffer. The result is that all buffers will use the 'encoding' encoding
Bram Moolenaardad44732021-03-31 20:07:33 +0200869(if conversion succeeds).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000870
871==============================================================================
8729. Tag or file name under the cursor *window-tag*
873
874 *:sta* *:stag*
875:sta[g][!] [tagname]
876 Does ":tag[!] [tagname]" and splits the window for the found
877 tag. See also |:tag|.
878
879CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
880CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200881 tag and jump to it in the new upper window.
882 In Visual mode uses the Visually selected text as a tag.
883 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000884
885 *CTRL-W_g]*
886CTRL-W g ] Split current window in two. Use identifier under cursor as a
887 tag and perform ":tselect" on it in the new upper window.
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200888 In Visual mode uses the Visually selected text as a tag.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000889 Make new window N high.
890
891 *CTRL-W_g_CTRL-]*
892CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200893 tag and perform ":tjump" on it in the new upper window.
894 In Visual mode uses the Visually selected text as a tag.
895 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000896
897CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
898CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000899 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000900 exist.
901 Uses the 'path' variable as a list of directory names where to
902 look for the file. Also the path for current file is
903 used to search for the file name.
904 If the name is a hypertext link that looks like
905 "type://machine/path", only "/path" is used.
906 If a count is given, the count'th matching file is edited.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000907
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000908CTRL-W F *CTRL-W_F*
909 Split current window in two. Edit file name under cursor and
910 jump to the line number following the file name. See |gF| for
911 details on how the line number is obtained.
912
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000913CTRL-W gf *CTRL-W_gf*
914 Open a new tab page and edit the file name under the cursor.
915 Like "tab split" and "gf", but the new tab page isn't created
916 if the file does not exist.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000917
Bram Moolenaar57657d82006-04-21 22:12:41 +0000918CTRL-W gF *CTRL-W_gF*
919 Open a new tab page and edit the file name under the cursor
920 and jump to the line number following the file name. Like
921 "tab split" and "gF", but the new tab page isn't created if
922 the file does not exist.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000923
Bram Moolenaar26967612019-03-17 17:13:16 +0100924CTRL-W gt *CTRL-W_gt*
925 Go to next tab page, same as `gt`.
926
927CTRL-W gT *CTRL-W_gT*
928 Go to previous tab page, same as `gT`.
929
Bram Moolenaar071d4272004-06-13 20:20:40 +0000930Also see |CTRL-W_CTRL-I|: open window for an included file that includes
931the keyword under the cursor.
932
933==============================================================================
93410. The preview window *preview-window*
935
936The preview window is a special window to show (preview) another file. It is
937normally a small window used to show an include file or definition of a
938function.
939{not available when compiled without the |+quickfix| feature}
940
Bram Moolenaarc270d802006-03-11 21:29:41 +0000941There can be only one preview window (per tab page). It is created with one
942of the commands below. The 'previewheight' option can be set to specify the
943height of the preview window when it's opened. The 'previewwindow' option is
944set in the preview window to be able to recognize it. The 'winfixheight'
945option is set to have it keep the same height when opening/closing other
946windows.
Bram Moolenaar79648732019-07-18 21:43:07 +0200947 *preview-popup*
948Alternatively, a popup window can be used by setting the 'previewpopup'
949option. When set, it overrules the 'previewwindow' and 'previewheight'
Bram Moolenaarcbaff5e2022-04-08 17:45:08 +0100950settings. The option is a comma-separated list of values:
Bram Moolenaar79648732019-07-18 21:43:07 +0200951 height maximum height of the popup
Bram Moolenaar85850f32019-07-19 22:05:51 +0200952 width maximum width of the popup
Bram Moolenaar06fe74a2019-08-31 16:20:32 +0200953 highlight highlight group of the popup (default is Pmenu)
Bram Moolenaar79648732019-07-18 21:43:07 +0200954Example: >
955 :set previewpopup=height:10,width:60
Bram Moolenaar2debf1c2019-08-04 20:44:19 +0200956
957A few peculiarities:
958- If the file is in a buffer already, it will be re-used. This will allow for
959 editing the file while it's visible in the popup window.
960- No ATTENTION dialog will be used, since you can't edit the file in the popup
961 window. However, if you later open the same buffer in a normal window, you
962 may not notice it's edited elsewhere. And when then using ":edit" to
963 trigger the ATTENTION and responding "A" for Abort, the preview window will
964 become empty.
965
Bram Moolenaar071d4272004-06-13 20:20:40 +0000966 *:pta* *:ptag*
967:pta[g][!] [tagname]
968 Does ":tag[!] [tagname]" and shows the found tag in a
969 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000970 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000971 (like a help window is). If a new one is opened,
972 'previewheight' is used for the height of the window. See
973 also |:tag|.
974 See below for an example. |CursorHold-example|
975 Small difference from |:tag|: When [tagname] is equal to the
976 already displayed tag, the position in the matching tag list
977 is not reset. This makes the CursorHold example work after a
978 |:ptnext|.
979
980CTRL-W z *CTRL-W_z*
981CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
982:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
983 option is set, or when the buffer was changed and the [!] is
984 used, the buffer becomes hidden (unless there is another
985 window editing it). The command fails if any "Preview" buffer
986 cannot be closed. See also |:close|.
987
988 *:pp* *:ppop*
989:[count]pp[op][!]
990 Does ":[count]pop[!]" in the preview window. See |:pop| and
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200991 |:ptag|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000992
993CTRL-W } *CTRL-W_}*
994 Use identifier under cursor as a tag and perform a :ptag on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000995 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000996 not given, 'previewheight' is used.
997
998CTRL-W g } *CTRL-W_g}*
999 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001000 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001001 not given, 'previewheight' is used.
1002
1003 *:ped* *:pedit*
1004:ped[it][!] [++opt] [+cmd] {file}
1005 Edit {file} in the preview window. The preview window is
1006 opened like with |:ptag|. The current window and cursor
1007 position isn't changed. Useful example: >
1008 :pedit +/fputc /usr/include/stdio.h
1009<
1010 *:ps* *:psearch*
1011:[range]ps[earch][!] [count] [/]pattern[/]
1012 Works like |:ijump| but shows the found match in the preview
1013 window. The preview window is opened like with |:ptag|. The
1014 current window and cursor position isn't changed. Useful
1015 example: >
1016 :psearch popen
1017< Like with the |:ptag| command, you can use this to
1018 automatically show information about the word under the
1019 cursor. This is less clever than using |:ptag|, but you don't
1020 need a tags file and it will also find matches in system
1021 include files. Example: >
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001022 :au! CursorHold *.[ch] ++nested exe "silent! psearch " .. expand("<cword>")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001023< Warning: This can be slow.
1024
1025Example *CursorHold-example* >
1026
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001027 :au! CursorHold *.[ch] ++nested exe "silent! ptag " .. expand("<cword>")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001028
1029This will cause a ":ptag" to be executed for the keyword under the cursor,
1030when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
1031makes other autocommands be executed, so that syntax highlighting works in the
1032preview window. The "silent!" avoids an error message when the tag could not
1033be found. Also see |CursorHold|. To disable this again: >
1034
1035 :au! CursorHold
1036
1037A nice addition is to highlight the found tag, avoid the ":ptag" when there
1038is no word under the cursor, and a few other things: >
1039
Bram Moolenaar1c6737b2020-09-07 22:18:52 +02001040 :au! CursorHold *.[ch] ++nested call PreviewWord()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001041 :func PreviewWord()
1042 : if &previewwindow " don't do this in the preview window
1043 : return
1044 : endif
1045 : let w = expand("<cword>") " get the word under cursor
1046 : if w =~ '\a' " if the word contains a letter
1047 :
1048 : " Delete any existing highlight before showing another tag
1049 : silent! wincmd P " jump to preview window
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001050 : if &previewwindow " if we really get there...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001051 : match none " delete existing highlight
1052 : wincmd p " back to old window
1053 : endif
1054 :
1055 : " Try displaying a matching tag for the word under the cursor
1056 : try
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001057 : exe "ptag " .. w
Bram Moolenaar071d4272004-06-13 20:20:40 +00001058 : catch
1059 : return
1060 : endtry
1061 :
1062 : silent! wincmd P " jump to preview window
1063 : if &previewwindow " if we really get there...
1064 : if has("folding")
1065 : silent! .foldopen " don't want a closed fold
1066 : endif
1067 : call search("$", "b") " to end of previous line
1068 : let w = substitute(w, '\\', '\\\\', "")
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001069 : call search('\<\V' .. w .. '\>') " position cursor on match
Bram Moolenaar071d4272004-06-13 20:20:40 +00001070 : " Add a match highlight to the word at this position
1071 : hi previewWord term=bold ctermbg=green guibg=green
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001072 : exe 'match previewWord "\%' .. line(".") .. 'l\%' .. col(".") .. 'c\k*"'
Bram Moolenaar071d4272004-06-13 20:20:40 +00001073 : wincmd p " back to old window
1074 : endif
1075 : endif
1076 :endfun
1077
1078==============================================================================
107911. Using hidden buffers *buffer-hidden*
1080
1081A hidden buffer is not displayed in a window, but is still loaded into memory.
1082This makes it possible to jump from file to file, without the need to read or
1083write the file every time you get another buffer in a window.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001084
1085 *:buffer-!*
1086If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
1087commands that start editing another file: ":edit", ":next", ":tag", etc. The
1088commands that move through the buffer list sometimes make the current buffer
1089hidden although the 'hidden' option is not set. This happens when a buffer is
1090modified, but is forced (with '!') to be removed from a window, and
1091'autowrite' is off or the buffer can't be written.
1092
1093You can make a hidden buffer not hidden by starting to edit it with any
Bram Moolenaar3f32a5f2022-05-12 20:34:15 +01001094command, or by deleting it with the ":bdelete" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001095
1096The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
1097can be used to make an exception for a specific buffer. It can take these
1098values:
1099 <empty> Use the value of 'hidden'.
1100 hide Hide this buffer, also when 'hidden' is not set.
1101 unload Don't hide but unload this buffer, also when 'hidden'
1102 is set.
1103 delete Delete the buffer.
1104
1105 *hidden-quit*
1106When you try to quit Vim while there is a hidden, modified buffer, you will
1107get an error message and Vim will make that buffer the current buffer. You
1108can then decide to write this buffer (":wq") or quit without writing (":q!").
1109Be careful: there may be more hidden, modified buffers!
1110
1111A buffer can also be unlisted. This means it exists, but it is not in the
1112list of buffers. |unlisted-buffer|
1113
1114
Bram Moolenaard51cb702015-07-21 15:03:06 +02001115:files[!] [flags] *:files*
1116:buffers[!] [flags] *:buffers* *:ls*
1117:ls[!] [flags]
1118 Show all buffers. Example:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001119
Bram Moolenaar97d62492012-11-15 21:28:22 +01001120 1 #h "/test/text" line 1 ~
1121 2u "asdf" line 0 ~
1122 3 %a + "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +00001123
1124 When the [!] is included the list will show unlisted buffers
1125 (the term "unlisted" is a bit confusing then...).
1126
1127 Each buffer has a unique number. That number will not change,
Bram Moolenaar0122c402015-02-03 19:13:34 +01001128 thus you can always go to a specific buffer with ":buffer N"
1129 or "N CTRL-^", where N is the buffer number.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001130
Bram Moolenaarc6896e22019-05-30 22:32:34 +02001131 For the file name these special values are used:
1132 [Prompt] |prompt-buffer|
1133 [Popup] buffer of a |popup-window|
1134 [Scratch] 'buftype' is "nofile"
1135 [No Name] no file name specified
1136 For a |terminal-window| buffer the status is used.
1137
Bram Moolenaar071d4272004-06-13 20:20:40 +00001138 Indicators (chars in the same column are mutually exclusive):
1139 u an unlisted buffer (only displayed when [!] is used)
1140 |unlisted-buffer|
1141 % the buffer in the current window
1142 # the alternate buffer for ":e #" and CTRL-^
1143 a an active buffer: it is loaded and visible
1144 h a hidden buffer: It is loaded, but currently not
1145 displayed in a window |hidden-buffer|
1146 - a buffer with 'modifiable' off
1147 = a readonly buffer
Bram Moolenaarc572da52017-08-27 16:52:01 +02001148 R a terminal buffer with a running job
1149 F a terminal buffer with a finished job
Bram Moolenaar37c64c72017-09-19 22:06:03 +02001150 ? a terminal buffer without a job: `:terminal NONE`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001151 + a modified buffer
1152 x a buffer with read errors
1153
Bram Moolenaard51cb702015-07-21 15:03:06 +02001154 [flags] can be a combination of the following characters,
1155 which restrict the buffers to be listed:
1156 + modified buffers
1157 - buffers with 'modifiable' off
1158 = readonly buffers
1159 a active buffers
Bram Moolenaare392eb42015-11-19 20:38:09 +01001160 u unlisted buffers (overrides the "!")
Bram Moolenaard51cb702015-07-21 15:03:06 +02001161 h hidden buffers
1162 x buffers with a read error
1163 % current buffer
1164 # alternate buffer
Bram Moolenaar0751f512018-03-29 16:37:16 +02001165 R terminal buffers with a running job
1166 F terminal buffers with a finished job
1167 ? terminal buffers without a job: `:terminal NONE`
Bram Moolenaar52410572019-10-27 05:12:45 +01001168 t show time last used and sort buffers
Bram Moolenaard51cb702015-07-21 15:03:06 +02001169 Combining flags means they are "and"ed together, e.g.:
1170 h+ hidden buffers which are modified
1171 a+ active buffers which are modified
1172
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +02001173 When using |:filter| the pattern is matched against the
1174 displayed buffer name, e.g.: >
1175 filter /\.vim/ ls
1176<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001177 *:bad* *:badd*
1178:bad[d] [+lnum] {fname}
Bram Moolenaar3d1cde82020-08-15 18:55:18 +02001179 Add file name {fname} to the buffer list, without loading it,
1180 if it wasn't listed yet. If the buffer was previously
1181 deleted, not wiped, it will be made listed again.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001182 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001183 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +00001184 commands after the + will be ignored.
1185
Bram Moolenaar59d8e562020-11-07 18:41:10 +01001186 *:balt*
1187:balt [+lnum] {fname}
1188 Like `:badd` and also set the alternate file for the current
1189 window to {fname}.
1190
Bram Moolenaar071d4272004-06-13 20:20:40 +00001191:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
1192:bd[elete][!] [N]
1193 Unload buffer [N] (default: current buffer) and delete it from
1194 the buffer list. If the buffer was changed, this fails,
1195 unless when [!] is specified, in which case changes are lost.
1196 The file remains unaffected. Any windows for this buffer are
1197 closed. If buffer [N] is the current buffer, another buffer
1198 will be displayed instead. This is the most recent entry in
1199 the jump list that points into a loaded buffer.
1200 Actually, the buffer isn't completely deleted, it is removed
1201 from the buffer list |unlisted-buffer| and option values,
1202 variables and mappings/abbreviations for the buffer are
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001203 cleared. Examples: >
1204 :.,$-bdelete " delete buffers from the current one to
1205 " last but one
1206 :%bdelete " delete all buffers
1207<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001208
1209:bdelete[!] {bufname} *E93* *E94*
Bram Moolenaar15142e22018-04-30 22:19:58 +02001210 Like ":bdelete[!] [N]", but buffer given by name, see
1211 |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001212
1213:bdelete[!] N1 N2 ...
1214 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
1215 buffer numbers or buffer names (but not buffer names that are
1216 a number). Insert a backslash before a space in a buffer
1217 name.
1218
1219:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
1220 |inclusive|.
1221
1222:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
1223:bw[ipeout][!] {bufname}
1224:N,Mbw[ipeout][!]
1225:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00001226 Like |:bdelete|, but really delete the buffer. Everything
1227 related to the buffer is lost. All marks in this buffer
1228 become invalid, option settings are lost, etc. Don't use this
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001229 unless you know what you are doing. Examples: >
1230 :.+,$bwipeout " wipe out all buffers after the current
1231 " one
1232 :%bwipeout " wipe out all buffers
1233<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001234
1235:[N]bun[load][!] *:bun* *:bunload* *E515*
1236:bun[load][!] [N]
1237 Unload buffer [N] (default: current buffer). The memory
1238 allocated for this buffer will be freed. The buffer remains
1239 in the buffer list.
1240 If the buffer was changed, this fails, unless when [!] is
1241 specified, in which case the changes are lost.
1242 Any windows for this buffer are closed. If buffer [N] is the
1243 current buffer, another buffer will be displayed instead.
1244 This is the most recent entry in the jump list that points
1245 into a loaded buffer.
1246
1247:bunload[!] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001248 Like ":bunload[!] [N]", but buffer given by name.
1249 Also see |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001250
1251:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1252 |inclusive|.
1253
1254:bunload[!] N1 N2 ...
1255 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1256 buffer numbers or buffer names (but not buffer names that are
1257 a number). Insert a backslash before a space in a buffer
1258 name.
1259
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001260:[N]b[uffer][!] [+cmd] [N] *:b* *:bu* *:buf* *:buffer* *E86*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001261 Edit buffer [N] from the buffer list. If [N] is not given,
1262 the current buffer remains being edited. See |:buffer-!| for
1263 [!]. This will also edit a buffer that is not in the buffer
1264 list, without setting the 'buflisted' flag.
Bram Moolenaar47003982021-12-05 21:54:04 +00001265 The notation with single quotes does not work here,
1266 `:buf 12'345'` uses 12'345 as a buffer name.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001267 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268
Bram Moolenaar15142e22018-04-30 22:19:58 +02001269:[N]b[uffer][!] [+cmd] {bufname} *{bufname}*
1270 Edit buffer for {bufname} from the buffer list. A partial
1271 name also works, so long as it is unique in the list of
1272 buffers.
1273 Note that a buffer whose name is a number cannot be referenced
1274 by that name; use the buffer number instead.
1275 Insert a backslash before a space in a buffer name.
1276 See |:buffer-!| for [!].
1277 This will also edit a buffer that is not in the buffer list,
1278 without setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001279 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001280
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001281:[N]sb[uffer] [+cmd] [N] *:sb* *:sbuffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282 Split window and edit buffer [N] from the buffer list. If [N]
1283 is not given, the current buffer is edited. Respects the
1284 "useopen" setting of 'switchbuf' when splitting. This will
1285 also edit a buffer that is not in the buffer list, without
1286 setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001287 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001288
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001289:[N]sb[uffer] [+cmd] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001290 Split window and edit buffer for |{bufname}| from the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001291 list. This will also edit a buffer that is not in the buffer
1292 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001293 Note: If what you want to do is split the buffer, make a copy
1294 under another name, you can do it this way: >
1295 :w foobar | sp #
Bram Moolenaar12969c02015-09-08 23:36:10 +02001296< Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001297
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001298:[N]bn[ext][!] [+cmd] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001299 Go to [N]th next buffer in buffer list. [N] defaults to one.
1300 Wraps around the end of the buffer list.
1301 See |:buffer-!| for [!].
Bram Moolenaar12969c02015-09-08 23:36:10 +02001302 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001303 If you are in a help buffer, this takes you to the next help
1304 buffer (if there is one). Similarly, if you are in a normal
1305 (non-help) buffer, this takes you to the next normal buffer.
1306 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001307 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001308 commands also work like this.
1309
1310 *:sbn* *:sbnext*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001311:[N]sbn[ext] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001312 Split window and go to [N]th next buffer in buffer list.
1313 Wraps around the end of the buffer list. Uses 'switchbuf'
Bram Moolenaar12969c02015-09-08 23:36:10 +02001314 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001315
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001316:[N]bN[ext][!] [+cmd] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1317:[N]bp[revious][!] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001318 Go to [N]th previous buffer in buffer list. [N] defaults to
1319 one. Wraps around the start of the buffer list.
1320 See |:buffer-!| for [!] and 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001321 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001322
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001323:[N]sbN[ext] [+cmd] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1324:[N]sbp[revious] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001325 Split window and go to [N]th previous buffer in buffer list.
1326 Wraps around the start of the buffer list.
1327 Uses 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001328 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001329
Bram Moolenaar61da1bf2019-06-06 12:14:49 +02001330:br[ewind][!] [+cmd] *:br* *:bre* *:brewind*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001331 Go to first buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001332 empty, go to the first unlisted buffer.
1333 See |:buffer-!| for [!].
1334
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001335:bf[irst] [+cmd] *:bf* *:bfirst*
1336 Same as |:brewind|.
1337 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001338
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001339:sbr[ewind] [+cmd] *:sbr* *:sbrewind*
1340 Split window and go to first buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001341 buffer list is empty, go to the first unlisted buffer.
1342 Respects the 'switchbuf' option.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001343 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001344
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001345:sbf[irst] [+cmd] *:sbf* *:sbfirst*
1346 Same as ":sbrewind".
Bram Moolenaar071d4272004-06-13 20:20:40 +00001347
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001348:bl[ast][!] [+cmd] *:bl* *:blast*
1349 Go to last buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001350 empty, go to the last unlisted buffer.
1351 See |:buffer-!| for [!].
1352
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001353:sbl[ast] [+cmd] *:sbl* *:sblast*
1354 Split window and go to last buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001355 buffer list is empty, go to the last unlisted buffer.
1356 Respects 'switchbuf' option.
1357
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001358:[N]bm[odified][!] [+cmd] [N] *:bm* *:bmodified* *E84*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001359 Go to [N]th next modified buffer. Note: this command also
1360 finds unlisted buffers. If there is no modified buffer the
1361 command fails.
1362
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001363:[N]sbm[odified] [+cmd] [N] *:sbm* *:sbmodified*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001364 Split window and go to [N]th next modified buffer.
1365 Respects 'switchbuf' option.
1366 Note: this command also finds buffers not in the buffer list.
1367
1368:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1369:[N]sun[hide] [N]
1370 Rearrange the screen to open one window for each loaded buffer
1371 in the buffer list. When a count is given, this is the
1372 maximum number of windows to open.
1373
1374:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1375:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1376 the buffer list. When a count is given, this is the maximum
1377 number of windows to open. 'winheight' also limits the number
1378 of windows opened ('winwidth' if |:vertical| was prepended).
1379 Buf/Win Enter/Leave autocommands are not executed for the new
1380 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001381 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001382 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001383
1384Note: All the commands above that start editing another buffer, keep the
1385'readonly' flag as it was. This differs from the ":edit" command, which sets
1386the 'readonly' flag each time the file is read.
1387
1388==============================================================================
138912. Special kinds of buffers *special-buffers*
1390
1391Instead of containing the text of a file, buffers can also be used for other
1392purposes. A few options can be set to change the behavior of a buffer:
1393 'bufhidden' what happens when the buffer is no longer displayed
1394 in a window.
1395 'buftype' what kind of a buffer this is
1396 'swapfile' whether the buffer will have a swap file
1397 'buflisted' buffer shows up in the buffer list
1398
1399A few useful kinds of a buffer:
1400
Bram Moolenaar280f1262006-01-30 00:14:18 +00001401quickfix Used to contain the error list or the location list. See
1402 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1403 option to "quickfix". You are not supposed to change this!
1404 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001405
1406help Contains a help file. Will only be created with the |:help|
1407 command. The flag that indicates a help buffer is internal
1408 and can't be changed. The 'buflisted' option will be reset
1409 for a help buffer.
1410
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +02001411terminal A terminal window buffer, see |terminal|. The contents cannot
1412 be read or changed until the job ends.
1413
Bram Moolenaar677ee682005-01-27 14:41:15 +00001414directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001415 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001416 :setlocal buftype=nowrite
1417 :setlocal bufhidden=delete
1418 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001419< The buffer name is the name of the directory and is adjusted
1420 when using the |:cd| command.
1421
Yegappan Lakshmanand1a8d652021-11-03 21:56:45 +00001422 *scratch-buffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001423scratch Contains text that can be discarded at any time. It is kept
1424 when closing the window, it must be deleted explicitly.
1425 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001426 :setlocal buftype=nofile
1427 :setlocal bufhidden=hide
1428 :setlocal noswapfile
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001429< The buffer name can be used to identify the buffer, if you
1430 give it a meaningful name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001431
1432 *unlisted-buffer*
1433unlisted The buffer is not in the buffer list. It is not used for
1434 normal editing, but to show a help file, remember a file name
1435 or marks. The ":bdelete" command will also set this option,
1436 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001437 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001438<
1439
Bram Moolenaard473c8c2018-08-11 18:00:22 +02001440 vim:tw=78:ts=8:noet:ft=help:norl: