blob: 545a44b3b211a87a3259ed7ff6f684c206572a8d [file] [log] [blame]
Christian Brabandtff3d4b22025-04-30 19:54:52 +02001*windows.txt* For Vim version 9.1. Last change: 2025 Apr 30
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
Christian Brabandtb5841172024-09-07 17:28:04 +020070 *buffer-reuse*
71Each buffer has a unique number and the number will not change within a Vim
72session. The |bufnr()| and |bufname()| functions can be used to convert
73between a buffer name and the buffer number. There is one exception: if a new
74empty buffer is created and it is not modified, the buffer will be re-used
75when loading another file into that buffer. This also means the buffer number
76will not change.
Bram Moolenaar071d4272004-06-13 20:20:40 +000077
Bram Moolenaar7e8fd632006-02-18 22:14:51 +000078The main Vim window can hold several split windows. There are also tab pages
79|tab-page|, each of which can hold multiple windows.
Christian Brabandtb5841172024-09-07 17:28:04 +020080
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +020081 *window-ID* *winid* *windowid*
Bram Moolenaarc95a3022016-06-12 23:01:46 +020082Each window has a unique identifier called the window ID. This identifier
83will not change within a Vim session. The |win_getid()| and |win_id2tabwin()|
84functions can be used to convert between the window/tab number and the
85identifier. There is also the window number, which may change whenever
86windows are opened or closed, see |winnr()|.
Bram Moolenaarba3ff532018-11-04 14:45:49 +010087The window number is only valid in one specific tab. The window ID is valid
88across tabs. For most functions that take a window ID or a window number, the
89window number only applies to the current tab, while the window ID can refer
90to a window in any tab.
Bram Moolenaarc95a3022016-06-12 23:01:46 +020091
Bram Moolenaarc95a3022016-06-12 23:01:46 +020092
Bram Moolenaar071d4272004-06-13 20:20:40 +000093==============================================================================
942. Starting Vim *windows-starting*
95
96By default, Vim starts with one window, just like Vi.
97
98The "-o" and "-O" arguments to Vim can be used to open a window for each file
99in the argument list. The "-o" argument will split the windows horizontally;
100the "-O" argument will split the windows vertically. If both "-o" and "-O"
101are given, the last one encountered will be used to determine the split
102orientation. For example, this will open three windows, split horizontally: >
103 vim -o file1 file2 file3
104
105"-oN", where N is a decimal number, opens N windows split horizontally. If
106there are more file names than windows, only N windows are opened and some
107files do not get a window. If there are more windows than file names, the
108last few windows will be editing empty buffers. Similarly, "-ON" opens N
109windows split vertically, with the same restrictions.
110
111If there are many file names, the windows will become very small. You might
112want to set the 'winheight' and/or 'winwidth' options to create a workable
113situation.
114
115Buf/Win Enter/Leave |autocommand|s are not executed when opening the new
116windows and reading the files, that's only done when they are really entered.
117
118 *status-line*
119A status line will be used to separate windows. The 'laststatus' option tells
120when the last window also has a status line:
121 'laststatus' = 0 never a status line
122 'laststatus' = 1 status line if there is more than one window
123 'laststatus' = 2 always a status line
124
125You can change the contents of the status line with the 'statusline' option.
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000126This option can be local to the window, so that you can have a different
127status line in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000128
129Normally, inversion is used to display the status line. This can be changed
130with the 's' character in the 'highlight' option. For example, "sb" sets it to
131bold characters. If no highlighting is used for the status line ("sn"), the
132'^' character is used for the current window, and '=' for other windows. If
133the mouse is supported and enabled with the 'mouse' option, a status line can
134be dragged to resize windows.
135
136Note: If you expect your status line to be in reverse video and it isn't,
137check if the 'highlight' option contains "si". In version 3.0, this meant to
138invert the status line. Now it should be "sr", reverse the status line, as
139"si" now stands for italic! If italic is not available on your terminal, the
140status line is inverted anyway; you will only see this problem on terminals
141that have termcap codes for italics.
142
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200143 *filler-lines*
Bram Moolenaara98f8a22021-02-13 18:24:23 +0100144The lines after the last buffer line in a window are called filler lines. By
145default, these lines start with a tilde (~) character. The 'eob' item in the
146'fillchars' option can be used to change this character. By default, these
147characters are highlighted as NonText (|hl-NonText|). The EndOfBuffer
148highlight group (|hl-EndOfBuffer|) can be used to change the highlighting of
149the filler characters.
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200150
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151==============================================================================
Bram Moolenaar2f0936c2022-01-08 21:51:59 +00001523. Opening and closing a window *opening-window*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153
154CTRL-W s *CTRL-W_s*
155CTRL-W S *CTRL-W_S*
156CTRL-W CTRL-S *CTRL-W_CTRL-S*
Bram Moolenaar7b449342014-03-25 13:03:48 +0100157:[N]sp[lit] [++opt] [+cmd] [file] *:sp* *:split*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158 Split current window in two. The result is two viewports on
Bram Moolenaar7b449342014-03-25 13:03:48 +0100159 the same file.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100160
Bram Moolenaar7b449342014-03-25 13:03:48 +0100161 Make the new window N high (default is to use half the height
162 of the current window). Reduces the current window height to
163 create room (and others, if the 'equalalways' option is set,
164 'eadirection' isn't "hor", and one of them is higher than the
165 current or the new window).
166
167 If [file] is given it will be edited in the new window. If it
168 is not loaded in any buffer, it will be read. Else the new
169 window will use the already loaded buffer.
170
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171 Note: CTRL-S does not work on all terminals and might block
172 further input, use CTRL-Q to get going again.
173 Also see |++opt| and |+cmd|.
Bram Moolenaara2baa732022-02-04 16:09:54 +0000174 *E242* *E1159*
Bram Moolenaar54775062019-07-31 21:07:14 +0200175 Be careful when splitting a window in an autocommand, it may
176 mess up the window layout if this happens while making other
177 window layout changes.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178
179CTRL-W CTRL-V *CTRL-W_CTRL-V*
180CTRL-W v *CTRL-W_v*
181:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
Bram Moolenaar67f71312007-08-12 14:55:56 +0000182 Like |:split|, but split vertically. The windows will be
183 spread out horizontally if
184 1. a width was not specified,
185 2. 'equalalways' is set,
186 3. 'eadirection' isn't "ver", and
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +0000187 4. one of the other windows is wider than the current or new
Bram Moolenaar67f71312007-08-12 14:55:56 +0000188 window.
Bram Moolenaarfd999452022-08-24 18:30:14 +0100189 If N was given make the new window N columns wide, if
190 possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191 Note: In other places CTRL-Q does the same as CTRL-V, but here
192 it doesn't!
193
194CTRL-W n *CTRL-W_n*
Christian Brabandtee17b6f2023-09-09 11:23:50 +0200195CTRL-W CTRL-N *CTRL-W_CTRL-N*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196:[N]new [++opt] [+cmd] *:new*
197 Create a new window and start editing an empty file in it.
198 Make new window N high (default is to use half the existing
199 height). Reduces the current window height to create room (and
200 others, if the 'equalalways' option is set and 'eadirection'
201 isn't "hor").
202 Also see |++opt| and |+cmd|.
203 If 'fileformats' is not empty, the first format given will be
204 used for the new buffer. If 'fileformats' is empty, the
205 'fileformat' of the current buffer is used. This can be
206 overridden with the |++opt| argument.
207 Autocommands are executed in this order:
208 1. WinLeave for the current window
209 2. WinEnter for the new window
210 3. BufLeave for the current buffer
211 4. BufEnter for the new buffer
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200212 This behaves like a ":split" first, and then an ":enew"
213 command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215:[N]new [++opt] [+cmd] {file}
216:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200217 Create a new window and start editing file {file} in it. This
Bram Moolenaar942db232021-02-13 18:14:48 +0100218 behaves almost like a ":split" first, and then an ":edit"
219 command, but the alternate file name in the original window is
220 set to {file}.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221 If [+cmd] is given, execute the command when the file has been
222 loaded |+cmd|.
223 Also see |++opt|.
224 Make new window N high (default is to use half the existing
225 height). Reduces the current window height to create room
226 (and others, if the 'equalalways' option is set).
227
Bram Moolenaar4072ba52020-12-23 13:56:35 +0100228:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
229 Like |:new|, but split vertically. If 'equalalways' is set
230 and 'eadirection' isn't "ver" the windows will be spread out
231 horizontally, unless a width was specified.
232
Bram Moolenaarff781552020-03-19 20:37:11 +0100233:[N]sv[iew] [++opt] [+cmd] [file] *:sv* *:sview* *splitview*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000234 Same as ":split", but set 'readonly' option for this buffer.
235
Bram Moolenaar61da1bf2019-06-06 12:14:49 +0200236:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfi* *:sfind* *splitfind*
Bram Moolenaarc236c162008-07-13 17:41:49 +0000237 Same as ":split", but search for {file} in 'path' like in
238 |:find|. Doesn't split if {file} is not found.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239
240CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
Bram Moolenaar1bbb6192018-11-10 16:02:01 +0100241CTRL-W ^ Split the current window in two and edit the alternate file.
242 When a count N is given, split the current window and edit
243 buffer N. Similar to ":sp #" and ":sp #N", but it allows the
244 other buffer to be unnamed. This command matches the behavior
245 of |CTRL-^|, except that it splits a window first.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000246
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200247 *CTRL-W_:*
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200248CTRL-W : Does the same as typing |:| - enter a command line. Useful in a
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200249 terminal window, where all Vim commands must be preceded with
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200250 CTRL-W or 'termwinkey'.
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200251
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252Note that the 'splitbelow' and 'splitright' options influence where a new
253window will appear.
Bram Moolenaar2f0936c2022-01-08 21:51:59 +0000254 *E36*
255Creating a window will fail if there is not enough room. Every window needs
256at least one screen line and column, sometimes more. Options 'winminheight'
257and 'winminwidth' are relevant.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258
259 *:vert* *:vertical*
260:vert[ical] {cmd}
261 Execute {cmd}. If it contains a command that splits a window,
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100262 it will be split vertically. For `vertical wincmd =` windows
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100263 will be equalized only vertically.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000264 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265
h-eastfd771612025-01-02 17:34:55 +0100266 *:hor* *:horizontal*
267:hor[izontal] {cmd}
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100268 Execute {cmd}. Currently only makes a difference for
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100269 `horizontal wincmd =`, which will equalize windows only
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100270 horizontally.
271
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272:lefta[bove] {cmd} *:lefta* *:leftabove*
273:abo[veleft] {cmd} *:abo* *:aboveleft*
274 Execute {cmd}. If it contains a command that splits a window,
275 it will be opened left (vertical split) or above (horizontal
276 split) the current window. Overrules 'splitbelow' and
277 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000278 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279
280:rightb[elow] {cmd} *:rightb* *:rightbelow*
281:bel[owright] {cmd} *:bel* *:belowright*
282 Execute {cmd}. If it contains a command that splits a window,
283 it will be opened right (vertical split) or below (horizontal
284 split) the current window. Overrules 'splitbelow' and
285 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000286 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287
288 *:topleft* *E442*
289:to[pleft] {cmd}
290 Execute {cmd}. If it contains a command that splits a window,
291 it will appear at the top and occupy the full width of the Vim
292 window. When the split is vertical the window appears at the
293 far left and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000294 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000295
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200296 *:bo* *:botright*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000297:bo[tright] {cmd}
298 Execute {cmd}. If it contains a command that splits a window,
299 it will appear at the bottom and occupy the full width of the
300 Vim window. When the split is vertical the window appears at
301 the far right and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000302 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000303
304These command modifiers can be combined to make a vertically split window
305occupy the full height. Example: >
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200306 :vertical topleft split tags
Bram Moolenaar071d4272004-06-13 20:20:40 +0000307Opens a vertically split, full-height window on the "tags" file at the far
308left of the Vim window.
309
310
311Closing a window
312----------------
313
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100314:q[uit]
Bram Moolenaar6c391a72021-09-09 21:55:11 +0200315:{count}q[uit] *:count_quit*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000316CTRL-W q *CTRL-W_q*
317CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100318 Without {count}: Quit the current window. If {count} is
319 given quit the {count} window.
Bram Moolenaar47e13952020-05-12 22:49:12 +0200320 *edit-window*
321 When quitting the last edit window (not counting help or
322 preview windows), exit Vim.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100323
Bram Moolenaar071d4272004-06-13 20:20:40 +0000324 When 'hidden' is set, and there is only one window for the
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100325 current buffer, it becomes hidden. When 'hidden' is not set,
326 and there is only one window for the current buffer, and the
327 buffer was changed, the command fails.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100328
Bram Moolenaared32d942014-12-06 23:33:00 +0100329 (Note: CTRL-Q does not work on all terminals).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100330
Bram Moolenaared32d942014-12-06 23:33:00 +0100331 If [count] is greater than the last window number the last
332 window will be closed: >
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100333 :1quit " quit the first window
334 :$quit " quit the last window
335 :9quit " quit the last window
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200336 " if there are fewer than 9 windows opened
337 :-quit " quit the previous window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100338 :+quit " quit the next window
Bram Moolenaared32d942014-12-06 23:33:00 +0100339 :+2quit " quit the second next window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100340<
Bram Moolenaar47e13952020-05-12 22:49:12 +0200341 When closing a help window, and this is not the only window,
342 Vim will try to restore the previous window layout, see
343 |:helpclose|.
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200344
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100345:q[uit]!
346:{count}q[uit]!
347 Without {count}: Quit the current window. If {count} is
348 given quit the {count} window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000349
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100350 If this was the last window for a buffer, any changes to that
351 buffer are lost. When quitting the last window (not counting
352 help windows), exit Vim. The contents of the buffer are lost,
353 even when 'hidden' is set.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100355:clo[se][!]
356:{count}clo[se][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000357CTRL-W c *CTRL-W_c* *:clo* *:close*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100358 Without {count}: Close the current window. If {count} is
359 given close the {count} window.
360
361 When the 'hidden' option is set, or when the buffer was
362 changed and the [!] is used, the buffer becomes hidden (unless
363 there is another window editing it).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100364
Bram Moolenaar47e13952020-05-12 22:49:12 +0200365 When there is only one |edit-window| in the current tab page
366 and there is another tab page, this closes the current tab
367 page. |tab-page|.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100368
Bram Moolenaar071d4272004-06-13 20:20:40 +0000369 This command fails when: *E444*
370 - There is only one window on the screen.
371 - When 'hidden' is not set, [!] is not used, the buffer has
372 changes, and there is no other window on this buffer.
373 Changes to the buffer are not written and won't get lost, so
374 this is a "safe" command.
375
376CTRL-W CTRL-C *CTRL-W_CTRL-C*
377 You might have expected that CTRL-W CTRL-C closes the current
378 window, but that does not work, because the CTRL-C cancels the
379 command.
380
381 *:hide*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100382:hid[e]
383:{count}hid[e]
Bram Moolenaarc572da52017-08-27 16:52:01 +0200384 Without {count}: Quit the current window, unless it is the
385 last window on the screen.
386 If {count} is given quit the {count} window.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100387
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100388 The buffer becomes hidden (unless there is another window
Bram Moolenaared32d942014-12-06 23:33:00 +0100389 editing it or 'bufhidden' is "unload", "delete" or "wipe").
390 If the window is the last one in the current tab page the tab
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100391 page is closed. |tab-page|
392
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100393 The value of 'hidden' is irrelevant for this command. Changes
394 to the buffer are not written and won't get lost, so this is a
395 "safe" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396
Doug Kearns0b2285c2024-09-08 19:39:20 +0200397:hid[e] {cmd} Execute {cmd} with 'hidden' set. The previous value of
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398 'hidden' is restored after {cmd} has been executed.
399 Example: >
400 :hide edit Makefile
401< This will edit "Makefile", and hide the current buffer if it
402 has any changes.
403
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100404:on[ly][!]
405:{count}on[ly][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406CTRL-W o *CTRL-W_o* *E445*
407CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100408 Make the current window the only one on the screen. All other
Bram Moolenaar6c391a72021-09-09 21:55:11 +0200409 windows are closed. For {count} see the `:quit` command
410 above |:count_quit|.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100411
Bram Moolenaar071d4272004-06-13 20:20:40 +0000412 When the 'hidden' option is set, all buffers in closed windows
413 become hidden.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100414
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415 When 'hidden' is not set, and the 'autowrite' option is set,
416 modified buffers are written. Otherwise, windows that have
417 buffers that are modified are not removed, unless the [!] is
418 given, then they become hidden. But modified buffers are
419 never abandoned, so changes cannot get lost.
420
421==============================================================================
4224. Moving cursor to other windows *window-move-cursor*
423
424CTRL-W <Down> *CTRL-W_<Down>*
425CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
426CTRL-W j Move cursor to Nth window below current one. Uses the cursor
427 position to select between alternatives.
428
429CTRL-W <Up> *CTRL-W_<Up>*
430CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
431CTRL-W k Move cursor to Nth window above current one. Uses the cursor
432 position to select between alternatives.
433
434CTRL-W <Left> *CTRL-W_<Left>*
435CTRL-W CTRL-H *CTRL-W_CTRL-H*
436CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
437CTRL-W h Move cursor to Nth window left of current one. Uses the
438 cursor position to select between alternatives.
439
440CTRL-W <Right> *CTRL-W_<Right>*
441CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
442CTRL-W l Move cursor to Nth window right of current one. Uses the
443 cursor position to select between alternatives.
444
445CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
446CTRL-W CTRL-W Without count: move cursor to window below/right of the
447 current one. If there is no window below or right, go to
448 top-left window.
449 With count: go to Nth window (windows are numbered from
450 top-left to bottom-right). To obtain the window number see
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100451 |bufwinnr()| and |winnr()|. When N is larger than the number
452 of windows go to the last window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000453
454 *CTRL-W_W*
455CTRL-W W Without count: move cursor to window above/left of current
456 one. If there is no window above or left, go to bottom-right
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100457 window. With count: go to Nth window, like with CTRL-W w.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000458
459CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
460CTRL-W CTRL-T Move cursor to top-left window.
461
462CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
463CTRL-W CTRL-B Move cursor to bottom-right window.
464
465CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
466CTRL-W CTRL-P Go to previous (last accessed) window.
467
468 *CTRL-W_P* *E441*
469CTRL-W P Go to preview window. When there is no preview window this is
470 an error.
471 {not available when compiled without the |+quickfix| feature}
472
473If Visual mode is active and the new window is not for the same buffer, the
474Visual mode is ended. If the window is on the same buffer, the cursor
475position is set to keep the same Visual area selected.
476
477 *:winc* *:wincmd*
478These commands can also be executed with ":wincmd":
479
480:[count]winc[md] {arg}
481 Like executing CTRL-W [count] {arg}. Example: >
482 :wincmd j
483< Moves to the window below the current one.
484 This command is useful when a Normal mode cannot be used (for
485 the |CursorHold| autocommand event). Or when a Normal mode
486 command is inconvenient.
487 The count can also be a window number. Example: >
Bram Moolenaarc51cf032022-02-26 12:25:45 +0000488 :exe nr .. "wincmd w"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000489< This goes to window "nr".
490
Christian Brabandtb5841172024-09-07 17:28:04 +0200491Note: All CTRL-W commands can also be executed with |:wincmd|, for those
492places where a Normal mode command can't be used or is inconvenient (e.g.
493in a browser-based terminal).
494
Bram Moolenaar071d4272004-06-13 20:20:40 +0000495==============================================================================
4965. Moving windows around *window-moving*
497
498CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
499CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
500 the second one, the second one becomes the third one, etc.
501 The last window becomes the first window. The cursor remains
502 in the same window.
503 This only works within the row or column of windows that the
504 current window is in.
505
506 *CTRL-W_R*
507CTRL-W R Rotate windows upwards/leftwards. The second window becomes
508 the first one, the third one becomes the second one, etc. The
509 first window becomes the last window. The cursor remains in
510 the same window.
511 This only works within the row or column of windows that the
512 current window is in.
513
514CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
515CTRL-W CTRL-X Without count: Exchange current window with next one. If there
516 is no next window, exchange with previous window.
517 With count: Exchange current window with Nth window (first
518 window is 1). The cursor is put in the other window.
519 When vertical and horizontal window splits are mixed, the
520 exchange is only done in the row or column of windows that the
521 current window is in.
522
523The following commands can be used to change the window layout. For example,
524when there are two vertically split windows, CTRL-W K will change that in
525horizontally split windows. CTRL-W H does it the other way around.
526
527 *CTRL-W_K*
528CTRL-W K Move the current window to be at the very top, using the full
Sean Dewar96cc4ae2024-02-20 21:52:31 +0100529 width of the screen. This works like `:topleft split`, except
530 it is applied to the current window and no new window is
531 created.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532
533 *CTRL-W_J*
534CTRL-W J Move the current window to be at the very bottom, using the
Sean Dewar96cc4ae2024-02-20 21:52:31 +0100535 full width of the screen. This works like `:botright split`,
536 except it is applied to the current window and no new window
537 is created.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000538
539 *CTRL-W_H*
540CTRL-W H Move the current window to be at the far left, using the
Sean Dewar96cc4ae2024-02-20 21:52:31 +0100541 full height of the screen. This works like
542 `:vert topleft split`, except it is applied to the current
543 window and no new window is created.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000544
545 *CTRL-W_L*
546CTRL-W L Move the current window to be at the far right, using the full
Sean Dewar96cc4ae2024-02-20 21:52:31 +0100547 height of the screen. This works like `:vert botright split`,
548 except it is applied to the current window and no new window
549 is created.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000550
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000551 *CTRL-W_T*
552CTRL-W T Move the current window to a new tab page. This fails if
553 there is only one window in the current tab page.
Sean Dewar96cc4ae2024-02-20 21:52:31 +0100554 This works like `:tab split`, except the previous window is
555 closed.
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000556 When a count is specified the new tab page will be opened
557 before the tab page with this index. Otherwise it comes after
558 the current tab page.
559
Bram Moolenaar071d4272004-06-13 20:20:40 +0000560==============================================================================
5616. Window resizing *window-resize*
562
563 *CTRL-W_=*
564CTRL-W = Make all windows (almost) equally high and wide, but use
565 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000566 Windows with 'winfixheight' set keep their height and windows
567 with 'winfixwidth' set keep their width.
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100568 To equalize only vertically (make window equally high) use
Bram Moolenaar76db9e02022-11-09 21:21:04 +0000569 `vertical wincmd =`.
Bram Moolenaar21c3a802022-08-31 17:49:14 +0100570 To equalize only horizontally (make window equally wide) use
Bram Moolenaar76db9e02022-11-09 21:21:04 +0000571 `horizontal wincmd =`.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000572
573:res[ize] -N *:res* *:resize* *CTRL-W_-*
574CTRL-W - Decrease current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200575 If used after |:vertical|: decrease width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000576
577:res[ize] +N *CTRL-W_+*
578CTRL-W + Increase current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200579 If used after |:vertical|: increase width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000580
581:res[ize] [N]
582CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
583CTRL-W _ Set current window height to N (default: highest possible).
584
Bram Moolenaar1ff14ba2019-11-02 14:09:23 +0100585:{winnr}res[ize] [+-]N
586 Like `:resize` above, but apply the size to window {winnr}
587 instead of the current window.
588
Bram Moolenaar071d4272004-06-13 20:20:40 +0000589z{nr}<CR> Set current window height to {nr}.
590
591 *CTRL-W_<*
592CTRL-W < Decrease current window width by N (default 1).
593
594 *CTRL-W_>*
595CTRL-W > Increase current window width by N (default 1).
596
Bram Moolenaar56994d22021-04-17 16:31:09 +0200597:vert[ical] res[ize] [N] *:vertical-resize* *CTRL-W_bar*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000598CTRL-W | Set current window width to N (default: widest possible).
599
600You can also resize a window by dragging a status line up or down with the
601mouse. Or by dragging a vertical separator line left or right. This only
602works if the version of Vim that is being used supports the mouse and the
603'mouse' option has been set to enable it.
604
605The option 'winheight' ('wh') is used to set the minimal window height of the
606current window. This option is used each time another window becomes the
607current window. If the option is '0', it is disabled. Set 'winheight' to a
608very large value, e.g., '9999', to make the current window always fill all
609available space. Set it to a reasonable value, e.g., '10', to make editing in
610the current window comfortable.
611
612The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
613the current window.
614
615When the option 'equalalways' ('ea') is set, all the windows are automatically
616made the same size after splitting or closing a window. If you don't set this
617option, splitting a window will reduce the size of the current window and
618leave the other windows the same. When closing a window, the extra lines are
619given to the window above it.
620
621The 'eadirection' option limits the direction in which the 'equalalways'
622option is applied. The default "both" resizes in both directions. When the
623value is "ver" only the heights of windows are equalized. Use this when you
624have manually resized a vertically split window and want to keep this width.
625Likewise, "hor" causes only the widths of windows to be equalized.
626
627The option 'cmdheight' ('ch') is used to set the height of the command-line.
628If you are annoyed by the |hit-enter| prompt for long messages, set this
629option to 2 or 3.
630
631If there is only one window, resizing that window will also change the command
632line height. If there are several windows, resizing the current window will
633also change the height of the window below it (and sometimes the window above
634it).
635
636The minimal height and width of a window is set with 'winminheight' and
637'winminwidth'. These are hard values, a window will never become smaller.
638
Bram Moolenaar35fc61c2022-11-22 12:40:50 +0000639
640WinScrolled and WinResized autocommands ~
641 *win-scrolled-resized*
642If you want to get notified of changes in window sizes, the |WinResized|
643autocommand event can be used.
644If you want to get notified of text in windows scrolling vertically or
645horizontally, the |WinScrolled| autocommand event can be used. This will also
646trigger in window size changes.
Bram Moolenaar86b48162022-12-06 18:20:10 +0000647Exception: the events will not be triggered when the text scrolls for
648'incsearch'.
Bram Moolenaar35fc61c2022-11-22 12:40:50 +0000649 *WinResized-event*
650The |WinResized| event is triggered after updating the display, several
651windows may have changed size then. A list of the IDs of windows that changed
652since last time is provided in the v:event.windows variable, for example:
653 [1003, 1006]
654 *WinScrolled-event*
655The |WinScrolled| event is triggered after |WinResized|, and also if a window
656was scrolled. That can be vertically (the text at the top of the window
657changed) or horizontally (when 'wrap' is off or when the first displayed part
658of the first line changes). Note that |WinScrolled| will trigger many more
659times than |WinResized|, it may slow down editing a bit.
660
661The information provided by |WinScrolled| is a dictionary for each window that
662has changes, using the window ID as the key, and a total count of the changes
663with the key "all". Example value for |v:event| (|Vim9| syntax):
664 {
zeertzjq3fc84dc2022-12-07 09:17:59 +0000665 all: {width: 0, height: 2, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
666 1003: {width: 0, height: -1, leftcol: 0, skipcol: 0, topline: 0, topfill: 0},
667 1006: {width: 0, height: 1, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
Bram Moolenaar35fc61c2022-11-22 12:40:50 +0000668 }
669
670Note that the "all" entry has the absolute values of the individual windows
671accumulated.
672
673If you need more information about what changed, or you want to "debounce" the
674events (not handle every event to avoid doing too much work), you may want to
675use the `winlayout()` and `getwininfo()` functions.
676
677|WinScrolled| and |WinResized| do not trigger when the first autocommand is
678added, only after the first scroll or resize. They may trigger when switching
679to another tab page.
680
681The commands executed are expected to not cause window size or scroll changes.
682If this happens anyway, the event will trigger again very soon. In other
683words: Just before triggering the event, the current sizes and scroll
684positions are stored and used to decide whether there was a change.
685 *E1312*
686It is not allowed to change the window layout here (split, close or move
687windows).
688
Bram Moolenaar071d4272004-06-13 20:20:40 +0000689==============================================================================
6907. Argument and buffer list commands *buffer-list*
691
692 args list buffer list meaning ~
6931. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
6942. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
6953. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
6964. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
6975. :rewind / :first 15. :brewind / :bfirst to first arg/buf
6986. :last 16. :blast to last arg/buf
6997. :all 17. :ball edit all args/buffers
700 18. :unhide edit all loaded buffers
701 19. :[N]bmod [N] to Nth modified buf
702
703 split & args list split & buffer list meaning ~
70421. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
70522. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
70623. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
70724. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
70825. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
70926. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000071027. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000711 38. :sunhide edit all loaded buffers
712 39. :[N]sbmod [N] split + to Nth modified buf
713
71440. :args list of arguments
71541. :buffers list of buffers
716
717The meaning of [N] depends on the command:
Bram Moolenaar24a98a02017-09-27 22:23:55 +0200718 [N] is the number of buffers to go forward/backward on 2/12/22/32,
719 3/13/23/33, and 4/14/24/34
Bram Moolenaar071d4272004-06-13 20:20:40 +0000720 [N] is an argument number, defaulting to current argument, for 1 and 21
721 [N] is a buffer number, defaulting to current buffer, for 11 and 31
722 [N] is a count for 19 and 39
723
724Note: ":next" is an exception, because it must accept a list of file names
725for compatibility with Vi.
726
727
728The argument list and multiple windows
729--------------------------------------
730
731The current position in the argument list can be different for each window.
732Remember that when doing ":e file", the position in the argument list stays
733the same, but you are not editing the file at that position. To indicate
734this, the file message (and the title, if you have one) shows
735"(file (N) of M)", where "(N)" is the current position in the file list, and
736"M" the number of files in the file list.
737
738All the entries in the argument list are added to the buffer list. Thus, you
739can also get to them with the buffer list commands, like ":bnext".
740
741:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
742:[N]sal[l][!] [N]
743 Rearrange the screen to open one window for each argument.
744 All other windows are closed. When a count is given, this is
745 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000746 With the |:tab| modifier open a tab page for each argument.
747 When there are more arguments than 'tabpagemax' further ones
748 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000749 When the 'hidden' option is set, all buffers in closed windows
750 become hidden.
751 When 'hidden' is not set, and the 'autowrite' option is set,
752 modified buffers are written. Otherwise, windows that have
753 buffers that are modified are not removed, unless the [!] is
754 given, then they become hidden. But modified buffers are
755 never abandoned, so changes cannot get lost.
756 [N] is the maximum number of windows to open. 'winheight'
757 also limits the number of windows opened ('winwidth' if
758 |:vertical| was prepended).
759 Buf/Win Enter/Leave autocommands are not executed for the new
760 windows here, that's only done when they are really entered.
Bram Moolenaar54775062019-07-31 21:07:14 +0200761 If autocommands change the window layout while this command is
762 busy an error will be given. *E249*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000763
764:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
765 Short for ":split | argument [N]": split window and go to Nth
766 argument. But when there is no such argument, the window is
767 not split. Also see |++opt| and |+cmd|.
768
769:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
770 Short for ":split | [N]next": split window and go to Nth next
771 argument. But when there is no next file, the window is not
772 split. Also see |++opt| and |+cmd|.
773
774:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
775:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
776 Short for ":split | [N]Next": split window and go to Nth
777 previous argument. But when there is no previous file, the
778 window is not split. Also see |++opt| and |+cmd|.
779
780 *:sre* *:srewind*
781:sre[wind][!] [++opt] [+cmd]
782 Short for ":split | rewind": split window and go to first
783 argument. But when there is no argument list, the window is
784 not split. Also see |++opt| and |+cmd|.
785
786 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000787:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000788 Same as ":srewind".
789
790 *:sla* *:slast*
791:sla[st][!] [++opt] [+cmd]
792 Short for ":split | last": split window and go to last
793 argument. But when there is no argument list, the window is
794 not split. Also see |++opt| and |+cmd|.
795
796 *:dr* *:drop*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000797:dr[op] [++opt] [+cmd] {file} ..
Bram Moolenaar071d4272004-06-13 20:20:40 +0000798 Edit the first {file} in a window.
799 - If the file is already open in a window change to that
800 window.
801 - If the file is not open in a window edit the file in the
802 current window. If the current buffer can't be |abandon|ed,
803 the window is split first.
Bram Moolenaar51628222016-12-01 23:03:28 +0100804 - Windows that are not in the argument list or are not full
805 width will be closed if possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000806 The |argument-list| is set, like with the |:next| command.
807 The purpose of this command is that it can be used from a
808 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000809 When using the |:tab| modifier each argument is opened in a
810 tab page. The last window is used if it's empty.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000811 Also see |++opt| and |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000812
813==============================================================================
8148. Do a command in all buffers or windows *list-repeat*
815
816 *:windo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100817:[range]windo {cmd} Execute {cmd} in each window or if [range] is given
818 only in windows for which the window number lies in
819 the [range]. It works like doing this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000820 CTRL-W t
821 :{cmd}
822 CTRL-W w
823 :{cmd}
824 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000825< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000826 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000827 windows will not be visited.
828 The last window (or where an error occurred) becomes
829 the current window.
830 {cmd} can contain '|' to concatenate several commands.
831 {cmd} must not open or close windows or reorder them.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200832
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200833 Also see |:tabdo|, |:argdo|, |:bufdo|, |:cdo|, |:ldo|,
834 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000835
836 *:bufdo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100837:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
838 [range] is given only for buffers for which their
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100839 buffer number is in the [range]. It works like doing
Bram Moolenaara162bc52015-01-07 16:54:21 +0100840 this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000841 :bfirst
842 :{cmd}
843 :bnext
844 :{cmd}
845 etc.
846< When the current file can't be |abandon|ed and the [!]
847 is not present, the command fails.
848 When an error is detected on one buffer, further
849 buffers will not be visited.
850 Unlisted buffers are skipped.
851 The last buffer (or where an error occurred) becomes
852 the current buffer.
853 {cmd} can contain '|' to concatenate several commands.
854 {cmd} must not delete buffers or add buffers to the
855 buffer list.
856 Note: While this command is executing, the Syntax
857 autocommand event is disabled by adding it to
858 'eventignore'. This considerably speeds up editing
859 each buffer.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200860
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200861 Also see |:tabdo|, |:argdo|, |:windo|, |:cdo|, |:ldo|,
862 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000863
864Examples: >
865
Bram Moolenaardad44732021-03-31 20:07:33 +0200866 :windo set nolist foldcolumn=0 | normal! zn
Bram Moolenaar071d4272004-06-13 20:20:40 +0000867
868This resets the 'list' option and disables folding in all windows. >
869
870 :bufdo set fileencoding= | update
871
872This resets the 'fileencoding' in each buffer and writes it if this changed
873the buffer. The result is that all buffers will use the 'encoding' encoding
Bram Moolenaardad44732021-03-31 20:07:33 +0200874(if conversion succeeds).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000875
876==============================================================================
8779. Tag or file name under the cursor *window-tag*
878
879 *:sta* *:stag*
880:sta[g][!] [tagname]
881 Does ":tag[!] [tagname]" and splits the window for the found
882 tag. See also |:tag|.
883
884CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
885CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200886 tag and jump to it in the new upper window.
887 In Visual mode uses the Visually selected text as a tag.
888 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000889
890 *CTRL-W_g]*
891CTRL-W g ] Split current window in two. Use identifier under cursor as a
892 tag and perform ":tselect" on it in the new upper window.
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200893 In Visual mode uses the Visually selected text as a tag.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000894 Make new window N high.
895
896 *CTRL-W_g_CTRL-]*
897CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200898 tag and perform ":tjump" on it in the new upper window.
899 In Visual mode uses the Visually selected text as a tag.
900 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000901
902CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
903CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000904 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000905 exist.
906 Uses the 'path' variable as a list of directory names where to
907 look for the file. Also the path for current file is
908 used to search for the file name.
909 If the name is a hypertext link that looks like
910 "type://machine/path", only "/path" is used.
911 If a count is given, the count'th matching file is edited.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000912
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000913CTRL-W F *CTRL-W_F*
914 Split current window in two. Edit file name under cursor and
915 jump to the line number following the file name. See |gF| for
916 details on how the line number is obtained.
917
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000918CTRL-W gf *CTRL-W_gf*
919 Open a new tab page and edit the file name under the cursor.
920 Like "tab split" and "gf", but the new tab page isn't created
921 if the file does not exist.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000922
Bram Moolenaar57657d82006-04-21 22:12:41 +0000923CTRL-W gF *CTRL-W_gF*
924 Open a new tab page and edit the file name under the cursor
925 and jump to the line number following the file name. Like
926 "tab split" and "gF", but the new tab page isn't created if
927 the file does not exist.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000928
Bram Moolenaar26967612019-03-17 17:13:16 +0100929CTRL-W gt *CTRL-W_gt*
930 Go to next tab page, same as `gt`.
931
932CTRL-W gT *CTRL-W_gT*
933 Go to previous tab page, same as `gT`.
934
Bram Moolenaar071d4272004-06-13 20:20:40 +0000935Also see |CTRL-W_CTRL-I|: open window for an included file that includes
936the keyword under the cursor.
937
938==============================================================================
93910. The preview window *preview-window*
940
941The preview window is a special window to show (preview) another file. It is
942normally a small window used to show an include file or definition of a
943function.
944{not available when compiled without the |+quickfix| feature}
945
Bram Moolenaarc270d802006-03-11 21:29:41 +0000946There can be only one preview window (per tab page). It is created with one
947of the commands below. The 'previewheight' option can be set to specify the
948height of the preview window when it's opened. The 'previewwindow' option is
949set in the preview window to be able to recognize it. The 'winfixheight'
950option is set to have it keep the same height when opening/closing other
951windows.
Bram Moolenaar79648732019-07-18 21:43:07 +0200952 *preview-popup*
953Alternatively, a popup window can be used by setting the 'previewpopup'
954option. When set, it overrules the 'previewwindow' and 'previewheight'
Bram Moolenaarcbaff5e2022-04-08 17:45:08 +0100955settings. The option is a comma-separated list of values:
Bram Moolenaar79648732019-07-18 21:43:07 +0200956 height maximum height of the popup
Bram Moolenaar85850f32019-07-19 22:05:51 +0200957 width maximum width of the popup
Bram Moolenaar06fe74a2019-08-31 16:20:32 +0200958 highlight highlight group of the popup (default is Pmenu)
Bram Moolenaar79648732019-07-18 21:43:07 +0200959Example: >
960 :set previewpopup=height:10,width:60
Bram Moolenaar2debf1c2019-08-04 20:44:19 +0200961
962A few peculiarities:
963- If the file is in a buffer already, it will be re-used. This will allow for
964 editing the file while it's visible in the popup window.
965- No ATTENTION dialog will be used, since you can't edit the file in the popup
966 window. However, if you later open the same buffer in a normal window, you
967 may not notice it's edited elsewhere. And when then using ":edit" to
968 trigger the ATTENTION and responding "A" for Abort, the preview window will
969 become empty.
970
h-east0c3e57b2025-01-02 11:00:49 +0100971 *:pt* *:ptag*
972:pt[ag][!] [tagname]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000973 Does ":tag[!] [tagname]" and shows the found tag in a
974 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000975 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000976 (like a help window is). If a new one is opened,
977 'previewheight' is used for the height of the window. See
978 also |:tag|.
979 See below for an example. |CursorHold-example|
980 Small difference from |:tag|: When [tagname] is equal to the
981 already displayed tag, the position in the matching tag list
982 is not reset. This makes the CursorHold example work after a
983 |:ptnext|.
984
985CTRL-W z *CTRL-W_z*
986CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
987:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
988 option is set, or when the buffer was changed and the [!] is
989 used, the buffer becomes hidden (unless there is another
990 window editing it). The command fails if any "Preview" buffer
991 cannot be closed. See also |:close|.
992
993 *:pp* *:ppop*
994:[count]pp[op][!]
995 Does ":[count]pop[!]" in the preview window. See |:pop| and
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200996 |:ptag|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000997
998CTRL-W } *CTRL-W_}*
999 Use identifier under cursor as a tag and perform a :ptag 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
1003CTRL-W g } *CTRL-W_g}*
1004 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001005 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001006 not given, 'previewheight' is used.
1007
Yinzuo Jianga2a2fe82024-12-16 21:22:09 +01001008 *:pb* *:pbuffer*
1009:[N]pb[uffer][!] [+cmd] [N]
1010 Edit buffer [N] from the buffer list in the preview window.
1011 If [N] is not given, the current buffer remains being edited.
1012 See |:buffer-!| for [!]. This will also edit a buffer that is
1013 not in the buffer list, without setting the 'buflisted' flag.
h-eastf2e08a12024-12-29 09:46:03 +01001014 The notation with single quotes does not work here,
1015 `:pbuffer 12'345'` uses 12'345' as a buffer name.
1016 Also see |+cmd|.
Yinzuo Jianga2a2fe82024-12-16 21:22:09 +01001017
Bram Moolenaar071d4272004-06-13 20:20:40 +00001018 *:ped* *:pedit*
1019:ped[it][!] [++opt] [+cmd] {file}
1020 Edit {file} in the preview window. The preview window is
1021 opened like with |:ptag|. The current window and cursor
1022 position isn't changed. Useful example: >
1023 :pedit +/fputc /usr/include/stdio.h
1024<
Yinzuo Jiangfbe9a692024-12-14 20:28:51 +01001025 Also see |++opt| and |+cmd|.
1026
Bram Moolenaar071d4272004-06-13 20:20:40 +00001027 *:ps* *:psearch*
1028:[range]ps[earch][!] [count] [/]pattern[/]
1029 Works like |:ijump| but shows the found match in the preview
1030 window. The preview window is opened like with |:ptag|. The
1031 current window and cursor position isn't changed. Useful
1032 example: >
1033 :psearch popen
1034< Like with the |:ptag| command, you can use this to
1035 automatically show information about the word under the
1036 cursor. This is less clever than using |:ptag|, but you don't
1037 need a tags file and it will also find matches in system
1038 include files. Example: >
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001039 :au! CursorHold *.[ch] ++nested exe "silent! psearch " .. expand("<cword>")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001040< Warning: This can be slow.
1041
1042Example *CursorHold-example* >
1043
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001044 :au! CursorHold *.[ch] ++nested exe "silent! ptag " .. expand("<cword>")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001045
1046This will cause a ":ptag" to be executed for the keyword under the cursor,
1047when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
1048makes other autocommands be executed, so that syntax highlighting works in the
1049preview window. The "silent!" avoids an error message when the tag could not
1050be found. Also see |CursorHold|. To disable this again: >
1051
1052 :au! CursorHold
1053
1054A nice addition is to highlight the found tag, avoid the ":ptag" when there
1055is no word under the cursor, and a few other things: >
1056
Bram Moolenaar1c6737b2020-09-07 22:18:52 +02001057 :au! CursorHold *.[ch] ++nested call PreviewWord()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001058 :func PreviewWord()
1059 : if &previewwindow " don't do this in the preview window
1060 : return
1061 : endif
1062 : let w = expand("<cword>") " get the word under cursor
1063 : if w =~ '\a' " if the word contains a letter
1064 :
1065 : " Delete any existing highlight before showing another tag
1066 : silent! wincmd P " jump to preview window
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001067 : if &previewwindow " if we really get there...
Bram Moolenaar071d4272004-06-13 20:20:40 +00001068 : match none " delete existing highlight
1069 : wincmd p " back to old window
1070 : endif
1071 :
1072 : " Try displaying a matching tag for the word under the cursor
1073 : try
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001074 : exe "ptag " .. w
Bram Moolenaar071d4272004-06-13 20:20:40 +00001075 : catch
1076 : return
1077 : endtry
1078 :
1079 : silent! wincmd P " jump to preview window
1080 : if &previewwindow " if we really get there...
1081 : if has("folding")
1082 : silent! .foldopen " don't want a closed fold
1083 : endif
1084 : call search("$", "b") " to end of previous line
1085 : let w = substitute(w, '\\', '\\\\', "")
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001086 : call search('\<\V' .. w .. '\>') " position cursor on match
Bram Moolenaar071d4272004-06-13 20:20:40 +00001087 : " Add a match highlight to the word at this position
1088 : hi previewWord term=bold ctermbg=green guibg=green
Bram Moolenaarc51cf032022-02-26 12:25:45 +00001089 : exe 'match previewWord "\%' .. line(".") .. 'l\%' .. col(".") .. 'c\k*"'
Bram Moolenaar071d4272004-06-13 20:20:40 +00001090 : wincmd p " back to old window
1091 : endif
1092 : endif
1093 :endfun
1094
1095==============================================================================
109611. Using hidden buffers *buffer-hidden*
1097
1098A hidden buffer is not displayed in a window, but is still loaded into memory.
1099This makes it possible to jump from file to file, without the need to read or
1100write the file every time you get another buffer in a window.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001101
1102 *:buffer-!*
1103If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
1104commands that start editing another file: ":edit", ":next", ":tag", etc. The
1105commands that move through the buffer list sometimes make the current buffer
1106hidden although the 'hidden' option is not set. This happens when a buffer is
1107modified, but is forced (with '!') to be removed from a window, and
1108'autowrite' is off or the buffer can't be written.
1109
1110You can make a hidden buffer not hidden by starting to edit it with any
Bram Moolenaar3f32a5f2022-05-12 20:34:15 +01001111command, or by deleting it with the ":bdelete" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001112
1113The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
1114can be used to make an exception for a specific buffer. It can take these
1115values:
1116 <empty> Use the value of 'hidden'.
1117 hide Hide this buffer, also when 'hidden' is not set.
1118 unload Don't hide but unload this buffer, also when 'hidden'
1119 is set.
1120 delete Delete the buffer.
1121
1122 *hidden-quit*
1123When you try to quit Vim while there is a hidden, modified buffer, you will
1124get an error message and Vim will make that buffer the current buffer. You
1125can then decide to write this buffer (":wq") or quit without writing (":q!").
1126Be careful: there may be more hidden, modified buffers!
1127
1128A buffer can also be unlisted. This means it exists, but it is not in the
1129list of buffers. |unlisted-buffer|
1130
1131
Bram Moolenaard51cb702015-07-21 15:03:06 +02001132:files[!] [flags] *:files*
1133:buffers[!] [flags] *:buffers* *:ls*
1134:ls[!] [flags]
1135 Show all buffers. Example:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001136
Bram Moolenaar97d62492012-11-15 21:28:22 +01001137 1 #h "/test/text" line 1 ~
1138 2u "asdf" line 0 ~
1139 3 %a + "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +00001140
1141 When the [!] is included the list will show unlisted buffers
1142 (the term "unlisted" is a bit confusing then...).
1143
1144 Each buffer has a unique number. That number will not change,
Bram Moolenaar0122c402015-02-03 19:13:34 +01001145 thus you can always go to a specific buffer with ":buffer N"
1146 or "N CTRL-^", where N is the buffer number.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001147
Bram Moolenaarc6896e22019-05-30 22:32:34 +02001148 For the file name these special values are used:
1149 [Prompt] |prompt-buffer|
1150 [Popup] buffer of a |popup-window|
1151 [Scratch] 'buftype' is "nofile"
1152 [No Name] no file name specified
1153 For a |terminal-window| buffer the status is used.
1154
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155 Indicators (chars in the same column are mutually exclusive):
1156 u an unlisted buffer (only displayed when [!] is used)
1157 |unlisted-buffer|
1158 % the buffer in the current window
1159 # the alternate buffer for ":e #" and CTRL-^
1160 a an active buffer: it is loaded and visible
1161 h a hidden buffer: It is loaded, but currently not
1162 displayed in a window |hidden-buffer|
1163 - a buffer with 'modifiable' off
1164 = a readonly buffer
Bram Moolenaarc572da52017-08-27 16:52:01 +02001165 R a terminal buffer with a running job
1166 F a terminal buffer with a finished job
Bram Moolenaar37c64c72017-09-19 22:06:03 +02001167 ? a terminal buffer without a job: `:terminal NONE`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001168 + a modified buffer
1169 x a buffer with read errors
1170
Bram Moolenaard51cb702015-07-21 15:03:06 +02001171 [flags] can be a combination of the following characters,
1172 which restrict the buffers to be listed:
1173 + modified buffers
1174 - buffers with 'modifiable' off
1175 = readonly buffers
1176 a active buffers
Bram Moolenaare392eb42015-11-19 20:38:09 +01001177 u unlisted buffers (overrides the "!")
Bram Moolenaard51cb702015-07-21 15:03:06 +02001178 h hidden buffers
1179 x buffers with a read error
1180 % current buffer
1181 # alternate buffer
Bram Moolenaar0751f512018-03-29 16:37:16 +02001182 R terminal buffers with a running job
1183 F terminal buffers with a finished job
1184 ? terminal buffers without a job: `:terminal NONE`
Bram Moolenaar52410572019-10-27 05:12:45 +01001185 t show time last used and sort buffers
Bram Moolenaard51cb702015-07-21 15:03:06 +02001186 Combining flags means they are "and"ed together, e.g.:
1187 h+ hidden buffers which are modified
1188 a+ active buffers which are modified
1189
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +02001190 When using |:filter| the pattern is matched against the
1191 displayed buffer name, e.g.: >
1192 filter /\.vim/ ls
1193<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001194 *:bad* *:badd*
1195:bad[d] [+lnum] {fname}
Bram Moolenaar3d1cde82020-08-15 18:55:18 +02001196 Add file name {fname} to the buffer list, without loading it,
1197 if it wasn't listed yet. If the buffer was previously
1198 deleted, not wiped, it will be made listed again.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001199 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001200 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +00001201 commands after the + will be ignored.
1202
Bram Moolenaar59d8e562020-11-07 18:41:10 +01001203 *:balt*
1204:balt [+lnum] {fname}
1205 Like `:badd` and also set the alternate file for the current
1206 window to {fname}.
1207
Bram Moolenaar071d4272004-06-13 20:20:40 +00001208:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
1209:bd[elete][!] [N]
1210 Unload buffer [N] (default: current buffer) and delete it from
1211 the buffer list. If the buffer was changed, this fails,
1212 unless when [!] is specified, in which case changes are lost.
1213 The file remains unaffected. Any windows for this buffer are
1214 closed. If buffer [N] is the current buffer, another buffer
1215 will be displayed instead. This is the most recent entry in
1216 the jump list that points into a loaded buffer.
1217 Actually, the buffer isn't completely deleted, it is removed
1218 from the buffer list |unlisted-buffer| and option values,
1219 variables and mappings/abbreviations for the buffer are
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001220 cleared. Examples: >
1221 :.,$-bdelete " delete buffers from the current one to
1222 " last but one
1223 :%bdelete " delete all buffers
1224<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001225
1226:bdelete[!] {bufname} *E93* *E94*
Bram Moolenaar15142e22018-04-30 22:19:58 +02001227 Like ":bdelete[!] [N]", but buffer given by name, see
1228 |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001229
1230:bdelete[!] N1 N2 ...
1231 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
1232 buffer numbers or buffer names (but not buffer names that are
1233 a number). Insert a backslash before a space in a buffer
1234 name.
1235
1236:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
1237 |inclusive|.
1238
1239:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
1240:bw[ipeout][!] {bufname}
1241:N,Mbw[ipeout][!]
1242:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00001243 Like |:bdelete|, but really delete the buffer. Everything
1244 related to the buffer is lost. All marks in this buffer
LemonBoy4ff3a9b2024-07-09 20:03:24 +02001245 become invalid, option settings are lost, the jumplist and
1246 tagstack data will be purged, etc. Don't use this
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001247 unless you know what you are doing. Examples: >
1248 :.+,$bwipeout " wipe out all buffers after the current
1249 " one
1250 :%bwipeout " wipe out all buffers
1251<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001252
1253:[N]bun[load][!] *:bun* *:bunload* *E515*
1254:bun[load][!] [N]
1255 Unload buffer [N] (default: current buffer). The memory
1256 allocated for this buffer will be freed. The buffer remains
1257 in the buffer list.
1258 If the buffer was changed, this fails, unless when [!] is
1259 specified, in which case the changes are lost.
1260 Any windows for this buffer are closed. If buffer [N] is the
1261 current buffer, another buffer will be displayed instead.
1262 This is the most recent entry in the jump list that points
1263 into a loaded buffer.
1264
1265:bunload[!] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001266 Like ":bunload[!] [N]", but buffer given by name.
1267 Also see |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268
1269:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1270 |inclusive|.
1271
1272:bunload[!] N1 N2 ...
1273 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1274 buffer numbers or buffer names (but not buffer names that are
1275 a number). Insert a backslash before a space in a buffer
1276 name.
1277
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001278:[N]b[uffer][!] [+cmd] [N] *:b* *:bu* *:buf* *:buffer* *E86*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001279 Edit buffer [N] from the buffer list. If [N] is not given,
1280 the current buffer remains being edited. See |:buffer-!| for
1281 [!]. This will also edit a buffer that is not in the buffer
1282 list, without setting the 'buflisted' flag.
Bram Moolenaar47003982021-12-05 21:54:04 +00001283 The notation with single quotes does not work here,
h-eastf2e08a12024-12-29 09:46:03 +01001284 `:buf 12'345'` uses 12'345' as a buffer name.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001285 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001286
Bram Moolenaar15142e22018-04-30 22:19:58 +02001287:[N]b[uffer][!] [+cmd] {bufname} *{bufname}*
1288 Edit buffer for {bufname} from the buffer list. A partial
1289 name also works, so long as it is unique in the list of
1290 buffers.
1291 Note that a buffer whose name is a number cannot be referenced
Christian Brabandtff3d4b22025-04-30 19:54:52 +02001292 by that name; use the buffer number instead. Same is true if
1293 the buffer name starts with a `+`, it will be interpreted as
1294 the start of a |+cmd|.
Bram Moolenaar15142e22018-04-30 22:19:58 +02001295 Insert a backslash before a space in a buffer name.
1296 See |:buffer-!| for [!].
1297 This will also edit a buffer that is not in the buffer list,
1298 without setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001299 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001300
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001301:[N]sb[uffer] [+cmd] [N] *:sb* *:sbuffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001302 Split window and edit buffer [N] from the buffer list. If [N]
1303 is not given, the current buffer is edited. Respects the
1304 "useopen" setting of 'switchbuf' when splitting. This will
1305 also edit a buffer that is not in the buffer list, without
1306 setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001307 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001308
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001309:[N]sb[uffer] [+cmd] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001310 Split window and edit buffer for |{bufname}| from the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001311 list. This will also edit a buffer that is not in the buffer
1312 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001313 Note: If what you want to do is split the buffer, make a copy
1314 under another name, you can do it this way: >
1315 :w foobar | sp #
Bram Moolenaar12969c02015-09-08 23:36:10 +02001316< Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001317
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001318:[N]bn[ext][!] [+cmd] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001319 Go to [N]th next buffer in buffer list. [N] defaults to one.
1320 Wraps around the end of the buffer list.
1321 See |:buffer-!| for [!].
Bram Moolenaar12969c02015-09-08 23:36:10 +02001322 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001323 If you are in a help buffer, this takes you to the next help
1324 buffer (if there is one). Similarly, if you are in a normal
1325 (non-help) buffer, this takes you to the next normal buffer.
1326 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001327 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001328 commands also work like this.
1329
1330 *:sbn* *:sbnext*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001331:[N]sbn[ext] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001332 Split window and go to [N]th next buffer in buffer list.
1333 Wraps around the end of the buffer list. Uses 'switchbuf'
Bram Moolenaar12969c02015-09-08 23:36:10 +02001334 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001335
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001336:[N]bN[ext][!] [+cmd] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1337:[N]bp[revious][!] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001338 Go to [N]th previous buffer in buffer list. [N] defaults to
1339 one. Wraps around the start of the buffer list.
1340 See |:buffer-!| for [!] and 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001341 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001342
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001343:[N]sbN[ext] [+cmd] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1344:[N]sbp[revious] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001345 Split window and go to [N]th previous buffer in buffer list.
1346 Wraps around the start of the buffer list.
1347 Uses 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001348 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001349
Bram Moolenaar61da1bf2019-06-06 12:14:49 +02001350:br[ewind][!] [+cmd] *:br* *:bre* *:brewind*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001351 Go to first buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001352 empty, go to the first unlisted buffer.
1353 See |:buffer-!| for [!].
1354
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001355:bf[irst] [+cmd] *:bf* *:bfirst*
1356 Same as |:brewind|.
1357 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001358
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001359:sbr[ewind] [+cmd] *:sbr* *:sbrewind*
1360 Split window and go to first buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001361 buffer list is empty, go to the first unlisted buffer.
1362 Respects the 'switchbuf' option.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001363 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001364
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001365:sbf[irst] [+cmd] *:sbf* *:sbfirst*
1366 Same as ":sbrewind".
Bram Moolenaar071d4272004-06-13 20:20:40 +00001367
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001368:bl[ast][!] [+cmd] *:bl* *:blast*
1369 Go to last buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001370 empty, go to the last unlisted buffer.
1371 See |:buffer-!| for [!].
1372
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001373:sbl[ast] [+cmd] *:sbl* *:sblast*
1374 Split window and go to last buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001375 buffer list is empty, go to the last unlisted buffer.
1376 Respects 'switchbuf' option.
1377
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001378:[N]bm[odified][!] [+cmd] [N] *:bm* *:bmodified* *E84*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001379 Go to [N]th next modified buffer. Note: this command also
1380 finds unlisted buffers. If there is no modified buffer the
1381 command fails.
1382
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001383:[N]sbm[odified] [+cmd] [N] *:sbm* *:sbmodified*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001384 Split window and go to [N]th next modified buffer.
1385 Respects 'switchbuf' option.
1386 Note: this command also finds buffers not in the buffer list.
1387
1388:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1389:[N]sun[hide] [N]
1390 Rearrange the screen to open one window for each loaded buffer
1391 in the buffer list. When a count is given, this is the
1392 maximum number of windows to open.
1393
1394:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1395:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1396 the buffer list. When a count is given, this is the maximum
1397 number of windows to open. 'winheight' also limits the number
1398 of windows opened ('winwidth' if |:vertical| was prepended).
1399 Buf/Win Enter/Leave autocommands are not executed for the new
1400 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001401 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001402 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001403
1404Note: All the commands above that start editing another buffer, keep the
1405'readonly' flag as it was. This differs from the ":edit" command, which sets
1406the 'readonly' flag each time the file is read.
1407
1408==============================================================================
140912. Special kinds of buffers *special-buffers*
1410
1411Instead of containing the text of a file, buffers can also be used for other
1412purposes. A few options can be set to change the behavior of a buffer:
1413 'bufhidden' what happens when the buffer is no longer displayed
1414 in a window.
1415 'buftype' what kind of a buffer this is
1416 'swapfile' whether the buffer will have a swap file
1417 'buflisted' buffer shows up in the buffer list
1418
1419A few useful kinds of a buffer:
1420
Bram Moolenaar280f1262006-01-30 00:14:18 +00001421quickfix Used to contain the error list or the location list. See
1422 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1423 option to "quickfix". You are not supposed to change this!
1424 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001425
1426help Contains a help file. Will only be created with the |:help|
1427 command. The flag that indicates a help buffer is internal
1428 and can't be changed. The 'buflisted' option will be reset
1429 for a help buffer.
1430
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +02001431terminal A terminal window buffer, see |terminal|. The contents cannot
1432 be read or changed until the job ends.
1433
Bram Moolenaar677ee682005-01-27 14:41:15 +00001434directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001435 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001436 :setlocal buftype=nowrite
1437 :setlocal bufhidden=delete
1438 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001439< The buffer name is the name of the directory and is adjusted
1440 when using the |:cd| command.
1441
Yegappan Lakshmanand1a8d652021-11-03 21:56:45 +00001442 *scratch-buffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001443scratch Contains text that can be discarded at any time. It is kept
1444 when closing the window, it must be deleted explicitly.
1445 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001446 :setlocal buftype=nofile
1447 :setlocal bufhidden=hide
1448 :setlocal noswapfile
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001449< The buffer name can be used to identify the buffer, if you
1450 give it a meaningful name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001451
1452 *unlisted-buffer*
1453unlisted The buffer is not in the buffer list. It is not used for
1454 normal editing, but to show a help file, remember a file name
1455 or marks. The ":bdelete" command will also set this option,
1456 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001457 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001458<
1459
Bram Moolenaard473c8c2018-08-11 18:00:22 +02001460 vim:tw=78:ts=8:noet:ft=help:norl: