blob: 187d00e4d9eb5375dd54a25964618d22743c0dfe [file] [log] [blame]
Bram Moolenaar68e65602019-05-26 21:33:31 +02001*windows.txt* For Vim version 8.1. Last change: 2019 May 18
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}
31{not able to use vertically split windows when the |+vertsplit| feature was
32disabled at compile time}
33
34==============================================================================
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000351. Introduction *windows-intro* *window*
Bram Moolenaar071d4272004-06-13 20:20:40 +000036
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010037Summary:
38 A buffer is the in-memory text of a file.
39 A window is a viewport on a buffer.
40 A tab page is a collection of windows.
41
Bram Moolenaar071d4272004-06-13 20:20:40 +000042A window is a viewport onto a buffer. You can use multiple windows on one
43buffer, or several windows on different buffers.
44
45A buffer is a file loaded into memory for editing. The original file remains
46unchanged until you write the buffer to the file.
47
48A buffer can be in one of three states:
49
50 *active-buffer*
51active: The buffer is displayed in a window. If there is a file for this
52 buffer, it has been read into the buffer. The buffer may have been
53 modified since then and thus be different from the file.
54 *hidden-buffer*
55hidden: The buffer is not displayed. If there is a file for this buffer, it
56 has been read into the buffer. Otherwise it's the same as an active
57 buffer, you just can't see it.
58 *inactive-buffer*
59inactive: The buffer is not displayed and does not contain anything. Options
60 for the buffer are remembered if the file was once loaded. It can
61 contain marks from the |viminfo| file. But the buffer doesn't
62 contain text.
63
64In a table:
65
66state displayed loaded ":buffers" ~
67 in window shows ~
68active yes yes 'a'
69hidden no yes 'h'
70inactive no no ' '
71
72Note: All CTRL-W commands can also be executed with |:wincmd|, for those
73places where a Normal mode command can't be used or is inconvenient.
74
Bram Moolenaar7e8fd632006-02-18 22:14:51 +000075The main Vim window can hold several split windows. There are also tab pages
76|tab-page|, each of which can hold multiple windows.
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +020077 *window-ID* *winid* *windowid*
Bram Moolenaarc95a3022016-06-12 23:01:46 +020078Each window has a unique identifier called the window ID. This identifier
79will not change within a Vim session. The |win_getid()| and |win_id2tabwin()|
80functions can be used to convert between the window/tab number and the
81identifier. There is also the window number, which may change whenever
82windows are opened or closed, see |winnr()|.
Bram Moolenaarba3ff532018-11-04 14:45:49 +010083The window number is only valid in one specific tab. The window ID is valid
84across tabs. For most functions that take a window ID or a window number, the
85window number only applies to the current tab, while the window ID can refer
86to a window in any tab.
Bram Moolenaarc95a3022016-06-12 23:01:46 +020087
88Each buffer has a unique number and the number will not change within a Vim
89session. The |bufnr()| and |bufname()| functions can be used to convert
90between a buffer name and the buffer number.
91
Bram Moolenaar071d4272004-06-13 20:20:40 +000092==============================================================================
932. Starting Vim *windows-starting*
94
95By default, Vim starts with one window, just like Vi.
96
97The "-o" and "-O" arguments to Vim can be used to open a window for each file
98in the argument list. The "-o" argument will split the windows horizontally;
99the "-O" argument will split the windows vertically. If both "-o" and "-O"
100are given, the last one encountered will be used to determine the split
101orientation. For example, this will open three windows, split horizontally: >
102 vim -o file1 file2 file3
103
104"-oN", where N is a decimal number, opens N windows split horizontally. If
105there are more file names than windows, only N windows are opened and some
106files do not get a window. If there are more windows than file names, the
107last few windows will be editing empty buffers. Similarly, "-ON" opens N
108windows split vertically, with the same restrictions.
109
110If there are many file names, the windows will become very small. You might
111want to set the 'winheight' and/or 'winwidth' options to create a workable
112situation.
113
114Buf/Win Enter/Leave |autocommand|s are not executed when opening the new
115windows and reading the files, that's only done when they are really entered.
116
117 *status-line*
118A status line will be used to separate windows. The 'laststatus' option tells
119when the last window also has a status line:
120 'laststatus' = 0 never a status line
121 'laststatus' = 1 status line if there is more than one window
122 'laststatus' = 2 always a status line
123
124You can change the contents of the status line with the 'statusline' option.
Bram Moolenaarb5bf5b82004-12-24 14:35:23 +0000125This option can be local to the window, so that you can have a different
126status line in each window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127
128Normally, inversion is used to display the status line. This can be changed
129with the 's' character in the 'highlight' option. For example, "sb" sets it to
130bold characters. If no highlighting is used for the status line ("sn"), the
131'^' character is used for the current window, and '=' for other windows. If
132the mouse is supported and enabled with the 'mouse' option, a status line can
133be dragged to resize windows.
134
135Note: If you expect your status line to be in reverse video and it isn't,
136check if the 'highlight' option contains "si". In version 3.0, this meant to
137invert the status line. Now it should be "sr", reverse the status line, as
138"si" now stands for italic! If italic is not available on your terminal, the
139status line is inverted anyway; you will only see this problem on terminals
140that have termcap codes for italics.
141
142==============================================================================
1433. Opening and closing a window *opening-window* *E36*
144
145CTRL-W s *CTRL-W_s*
146CTRL-W S *CTRL-W_S*
147CTRL-W CTRL-S *CTRL-W_CTRL-S*
Bram Moolenaar7b449342014-03-25 13:03:48 +0100148:[N]sp[lit] [++opt] [+cmd] [file] *:sp* *:split*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149 Split current window in two. The result is two viewports on
Bram Moolenaar7b449342014-03-25 13:03:48 +0100150 the same file.
151
152 Make the new window N high (default is to use half the height
153 of the current window). Reduces the current window height to
154 create room (and others, if the 'equalalways' option is set,
155 'eadirection' isn't "hor", and one of them is higher than the
156 current or the new window).
157
158 If [file] is given it will be edited in the new window. If it
159 is not loaded in any buffer, it will be read. Else the new
160 window will use the already loaded buffer.
161
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162 Note: CTRL-S does not work on all terminals and might block
163 further input, use CTRL-Q to get going again.
164 Also see |++opt| and |+cmd|.
165
166CTRL-W CTRL-V *CTRL-W_CTRL-V*
167CTRL-W v *CTRL-W_v*
168:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
Bram Moolenaar67f71312007-08-12 14:55:56 +0000169 Like |:split|, but split vertically. The windows will be
170 spread out horizontally if
171 1. a width was not specified,
172 2. 'equalalways' is set,
173 3. 'eadirection' isn't "ver", and
Bram Moolenaarc1a11ed2008-06-24 22:09:24 +0000174 4. one of the other windows is wider than the current or new
Bram Moolenaar67f71312007-08-12 14:55:56 +0000175 window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000176 Note: In other places CTRL-Q does the same as CTRL-V, but here
177 it doesn't!
178
179CTRL-W n *CTRL-W_n*
180CTRL-W CTRL_N *CTRL-W_CTRL-N*
181:[N]new [++opt] [+cmd] *:new*
182 Create a new window and start editing an empty file in it.
183 Make new window N high (default is to use half the existing
184 height). Reduces the current window height to create room (and
185 others, if the 'equalalways' option is set and 'eadirection'
186 isn't "hor").
187 Also see |++opt| and |+cmd|.
188 If 'fileformats' is not empty, the first format given will be
189 used for the new buffer. If 'fileformats' is empty, the
190 'fileformat' of the current buffer is used. This can be
191 overridden with the |++opt| argument.
192 Autocommands are executed in this order:
193 1. WinLeave for the current window
194 2. WinEnter for the new window
195 3. BufLeave for the current buffer
196 4. BufEnter for the new buffer
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200197 This behaves like a ":split" first, and then an ":enew"
198 command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199
200:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
201 Like |:new|, but split vertically. If 'equalalways' is set
202 and 'eadirection' isn't "ver" the windows will be spread out
203 horizontally, unless a width was specified.
204
205:[N]new [++opt] [+cmd] {file}
206:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
Bram Moolenaar53bfca22012-04-13 23:04:47 +0200207 Create a new window and start editing file {file} in it. This
208 behaves like a ":split" first, and then an ":e" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209 If [+cmd] is given, execute the command when the file has been
210 loaded |+cmd|.
211 Also see |++opt|.
212 Make new window N high (default is to use half the existing
213 height). Reduces the current window height to create room
214 (and others, if the 'equalalways' option is set).
215
216:[N]sv[iew] [++opt] [+cmd] {file} *:sv* *:sview* *splitview*
217 Same as ":split", but set 'readonly' option for this buffer.
218
219:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfind* *splitfind*
Bram Moolenaarc236c162008-07-13 17:41:49 +0000220 Same as ":split", but search for {file} in 'path' like in
221 |:find|. Doesn't split if {file} is not found.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222
223CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
Bram Moolenaar1bbb6192018-11-10 16:02:01 +0100224CTRL-W ^ Split the current window in two and edit the alternate file.
225 When a count N is given, split the current window and edit
226 buffer N. Similar to ":sp #" and ":sp #N", but it allows the
227 other buffer to be unnamed. This command matches the behavior
228 of |CTRL-^|, except that it splits a window first.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200230 *CTRL-W_:*
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200231CTRL-W : Does the same as typing |:| - enter a command line. Useful in a
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200232 terminal window, where all Vim commands must be preceded with
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200233 CTRL-W or 'termwinkey'.
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200234
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235Note that the 'splitbelow' and 'splitright' options influence where a new
236window will appear.
237
238 *:vert* *:vertical*
239:vert[ical] {cmd}
240 Execute {cmd}. If it contains a command that splits a window,
241 it will be split vertically.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000242 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243
244:lefta[bove] {cmd} *:lefta* *:leftabove*
245:abo[veleft] {cmd} *:abo* *:aboveleft*
246 Execute {cmd}. If it contains a command that splits a window,
247 it will be opened left (vertical split) or above (horizontal
248 split) the current window. Overrules 'splitbelow' and
249 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000250 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000251
252:rightb[elow] {cmd} *:rightb* *:rightbelow*
253:bel[owright] {cmd} *:bel* *:belowright*
254 Execute {cmd}. If it contains a command that splits a window,
255 it will be opened right (vertical split) or below (horizontal
256 split) the current window. Overrules 'splitbelow' and
257 'splitright'.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000258 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259
260 *:topleft* *E442*
261:to[pleft] {cmd}
262 Execute {cmd}. If it contains a command that splits a window,
263 it will appear at the top and occupy the full width of the Vim
264 window. When the split is vertical the window appears at the
265 far left and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000266 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200268 *:bo* *:botright*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269:bo[tright] {cmd}
270 Execute {cmd}. If it contains a command that splits a window,
271 it will appear at the bottom and occupy the full width of the
272 Vim window. When the split is vertical the window appears at
273 the far right and occupies the full height of the Vim window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000274 Doesn't work for |:execute| and |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000275
276These command modifiers can be combined to make a vertically split window
277occupy the full height. Example: >
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200278 :vertical topleft split tags
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279Opens a vertically split, full-height window on the "tags" file at the far
280left of the Vim window.
281
282
283Closing a window
284----------------
285
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100286:q[uit]
287:{count}q[uit]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288CTRL-W q *CTRL-W_q*
289CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100290 Without {count}: Quit the current window. If {count} is
291 given quit the {count} window.
292
293 When quitting the last window (not counting a help window),
294 exit Vim.
295
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296 When 'hidden' is set, and there is only one window for the
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100297 current buffer, it becomes hidden. When 'hidden' is not set,
298 and there is only one window for the current buffer, and the
299 buffer was changed, the command fails.
300
Bram Moolenaared32d942014-12-06 23:33:00 +0100301 (Note: CTRL-Q does not work on all terminals).
302
303 If [count] is greater than the last window number the last
304 window will be closed: >
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100305 :1quit " quit the first window
306 :$quit " quit the last window
307 :9quit " quit the last window
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200308 " if there are fewer than 9 windows opened
309 :-quit " quit the previous window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100310 :+quit " quit the next window
Bram Moolenaared32d942014-12-06 23:33:00 +0100311 :+2quit " quit the second next window
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100312<
313:q[uit]!
314:{count}q[uit]!
315 Without {count}: Quit the current window. If {count} is
316 given quit the {count} window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100318 If this was the last window for a buffer, any changes to that
319 buffer are lost. When quitting the last window (not counting
320 help windows), exit Vim. The contents of the buffer are lost,
321 even when 'hidden' is set.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100323:clo[se][!]
324:{count}clo[se][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000325CTRL-W c *CTRL-W_c* *:clo* *:close*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100326 Without {count}: Close the current window. If {count} is
327 given close the {count} window.
328
329 When the 'hidden' option is set, or when the buffer was
330 changed and the [!] is used, the buffer becomes hidden (unless
331 there is another window editing it).
332
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000333 When there is only one window in the current tab page and
334 there is another tab page, this closes the current tab page.
335 |tab-page|.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100336
Bram Moolenaar071d4272004-06-13 20:20:40 +0000337 This command fails when: *E444*
338 - There is only one window on the screen.
339 - When 'hidden' is not set, [!] is not used, the buffer has
340 changes, and there is no other window on this buffer.
341 Changes to the buffer are not written and won't get lost, so
342 this is a "safe" command.
343
344CTRL-W CTRL-C *CTRL-W_CTRL-C*
345 You might have expected that CTRL-W CTRL-C closes the current
346 window, but that does not work, because the CTRL-C cancels the
347 command.
348
349 *:hide*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100350:hid[e]
351:{count}hid[e]
Bram Moolenaarc572da52017-08-27 16:52:01 +0200352 Without {count}: Quit the current window, unless it is the
353 last window on the screen.
354 If {count} is given quit the {count} window.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100355
356 The buffer becomes hidden (unless there is another window
Bram Moolenaared32d942014-12-06 23:33:00 +0100357 editing it or 'bufhidden' is "unload", "delete" or "wipe").
358 If the window is the last one in the current tab page the tab
359 page is closed. |tab-page|
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100360
361 The value of 'hidden' is irrelevant for this command. Changes
362 to the buffer are not written and won't get lost, so this is a
363 "safe" command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000364
365:hid[e] {cmd} Execute {cmd} with 'hidden' is set. The previous value of
366 'hidden' is restored after {cmd} has been executed.
367 Example: >
368 :hide edit Makefile
369< This will edit "Makefile", and hide the current buffer if it
370 has any changes.
371
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100372:on[ly][!]
373:{count}on[ly][!]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000374CTRL-W o *CTRL-W_o* *E445*
375CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100376 Make the current window the only one on the screen. All other
377 windows are closed. For {count} see |:quit| command.
378
Bram Moolenaar071d4272004-06-13 20:20:40 +0000379 When the 'hidden' option is set, all buffers in closed windows
380 become hidden.
Bram Moolenaarb96a7f32014-11-27 16:22:48 +0100381
Bram Moolenaar071d4272004-06-13 20:20:40 +0000382 When 'hidden' is not set, and the 'autowrite' option is set,
383 modified buffers are written. Otherwise, windows that have
384 buffers that are modified are not removed, unless the [!] is
385 given, then they become hidden. But modified buffers are
386 never abandoned, so changes cannot get lost.
387
388==============================================================================
3894. Moving cursor to other windows *window-move-cursor*
390
391CTRL-W <Down> *CTRL-W_<Down>*
392CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
393CTRL-W j Move cursor to Nth window below current one. Uses the cursor
394 position to select between alternatives.
395
396CTRL-W <Up> *CTRL-W_<Up>*
397CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
398CTRL-W k Move cursor to Nth window above current one. Uses the cursor
399 position to select between alternatives.
400
401CTRL-W <Left> *CTRL-W_<Left>*
402CTRL-W CTRL-H *CTRL-W_CTRL-H*
403CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
404CTRL-W h Move cursor to Nth window left of current one. Uses the
405 cursor position to select between alternatives.
406
407CTRL-W <Right> *CTRL-W_<Right>*
408CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
409CTRL-W l Move cursor to Nth window right of current one. Uses the
410 cursor position to select between alternatives.
411
412CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
413CTRL-W CTRL-W Without count: move cursor to window below/right of the
414 current one. If there is no window below or right, go to
415 top-left window.
416 With count: go to Nth window (windows are numbered from
417 top-left to bottom-right). To obtain the window number see
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100418 |bufwinnr()| and |winnr()|. When N is larger than the number
419 of windows go to the last window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420
421 *CTRL-W_W*
422CTRL-W W Without count: move cursor to window above/left of current
423 one. If there is no window above or left, go to bottom-right
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100424 window. With count: go to Nth window, like with CTRL-W w.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000425
426CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
427CTRL-W CTRL-T Move cursor to top-left window.
428
429CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
430CTRL-W CTRL-B Move cursor to bottom-right window.
431
432CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
433CTRL-W CTRL-P Go to previous (last accessed) window.
434
435 *CTRL-W_P* *E441*
436CTRL-W P Go to preview window. When there is no preview window this is
437 an error.
438 {not available when compiled without the |+quickfix| feature}
439
440If Visual mode is active and the new window is not for the same buffer, the
441Visual mode is ended. If the window is on the same buffer, the cursor
442position is set to keep the same Visual area selected.
443
444 *:winc* *:wincmd*
445These commands can also be executed with ":wincmd":
446
447:[count]winc[md] {arg}
448 Like executing CTRL-W [count] {arg}. Example: >
449 :wincmd j
450< Moves to the window below the current one.
451 This command is useful when a Normal mode cannot be used (for
452 the |CursorHold| autocommand event). Or when a Normal mode
453 command is inconvenient.
454 The count can also be a window number. Example: >
455 :exe nr . "wincmd w"
456< This goes to window "nr".
457
458==============================================================================
4595. Moving windows around *window-moving*
460
461CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
462CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
463 the second one, the second one becomes the third one, etc.
464 The last window becomes the first window. The cursor remains
465 in the same window.
466 This only works within the row or column of windows that the
467 current window is in.
468
469 *CTRL-W_R*
470CTRL-W R Rotate windows upwards/leftwards. The second window becomes
471 the first one, the third one becomes the second one, etc. The
472 first window becomes the last window. The cursor remains in
473 the same window.
474 This only works within the row or column of windows that the
475 current window is in.
476
477CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
478CTRL-W CTRL-X Without count: Exchange current window with next one. If there
479 is no next window, exchange with previous window.
480 With count: Exchange current window with Nth window (first
481 window is 1). The cursor is put in the other window.
482 When vertical and horizontal window splits are mixed, the
483 exchange is only done in the row or column of windows that the
484 current window is in.
485
486The following commands can be used to change the window layout. For example,
487when there are two vertically split windows, CTRL-W K will change that in
488horizontally split windows. CTRL-W H does it the other way around.
489
490 *CTRL-W_K*
491CTRL-W K Move the current window to be at the very top, using the full
492 width of the screen. This works like closing the current
493 window and then creating another one with ":topleft split",
494 except that the current window contents is used for the new
495 window.
496
497 *CTRL-W_J*
498CTRL-W J Move the current window to be at the very bottom, using the
499 full width of the screen. This works like closing the current
500 window and then creating another one with ":botright split",
501 except that the current window contents is used for the new
502 window.
503
504 *CTRL-W_H*
505CTRL-W H Move the current window to be at the far left, using the
506 full height of the screen. This works like closing the
507 current window and then creating another one with
508 ":vert topleft split", except that the current window contents
509 is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200510 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000511
512 *CTRL-W_L*
513CTRL-W L Move the current window to be at the far right, using the full
514 height of the screen. This works like closing the
515 current window and then creating another one with
516 ":vert botright split", except that the current window
517 contents is used for the new window.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200518 {not available when compiled without the |+vertsplit| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000519
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000520 *CTRL-W_T*
521CTRL-W T Move the current window to a new tab page. This fails if
522 there is only one window in the current tab page.
523 When a count is specified the new tab page will be opened
524 before the tab page with this index. Otherwise it comes after
525 the current tab page.
526
Bram Moolenaar071d4272004-06-13 20:20:40 +0000527==============================================================================
5286. Window resizing *window-resize*
529
530 *CTRL-W_=*
531CTRL-W = Make all windows (almost) equally high and wide, but use
532 'winheight' and 'winwidth' for the current window.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +0000533 Windows with 'winfixheight' set keep their height and windows
534 with 'winfixwidth' set keep their width.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000535
536:res[ize] -N *:res* *:resize* *CTRL-W_-*
537CTRL-W - Decrease current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200538 If used after |:vertical|: decrease width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000539
540:res[ize] +N *CTRL-W_+*
541CTRL-W + Increase current window height by N (default 1).
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200542 If used after |:vertical|: increase width by N.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000543
544:res[ize] [N]
545CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
546CTRL-W _ Set current window height to N (default: highest possible).
547
548z{nr}<CR> Set current window height to {nr}.
549
550 *CTRL-W_<*
551CTRL-W < Decrease current window width by N (default 1).
552
553 *CTRL-W_>*
554CTRL-W > Increase current window width by N (default 1).
555
556:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
557CTRL-W | Set current window width to N (default: widest possible).
558
559You can also resize a window by dragging a status line up or down with the
560mouse. Or by dragging a vertical separator line left or right. This only
561works if the version of Vim that is being used supports the mouse and the
562'mouse' option has been set to enable it.
563
564The option 'winheight' ('wh') is used to set the minimal window height of the
565current window. This option is used each time another window becomes the
566current window. If the option is '0', it is disabled. Set 'winheight' to a
567very large value, e.g., '9999', to make the current window always fill all
568available space. Set it to a reasonable value, e.g., '10', to make editing in
569the current window comfortable.
570
571The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
572the current window.
573
574When the option 'equalalways' ('ea') is set, all the windows are automatically
575made the same size after splitting or closing a window. If you don't set this
576option, splitting a window will reduce the size of the current window and
577leave the other windows the same. When closing a window, the extra lines are
578given to the window above it.
579
580The 'eadirection' option limits the direction in which the 'equalalways'
581option is applied. The default "both" resizes in both directions. When the
582value is "ver" only the heights of windows are equalized. Use this when you
583have manually resized a vertically split window and want to keep this width.
584Likewise, "hor" causes only the widths of windows to be equalized.
585
586The option 'cmdheight' ('ch') is used to set the height of the command-line.
587If you are annoyed by the |hit-enter| prompt for long messages, set this
588option to 2 or 3.
589
590If there is only one window, resizing that window will also change the command
591line height. If there are several windows, resizing the current window will
592also change the height of the window below it (and sometimes the window above
593it).
594
595The minimal height and width of a window is set with 'winminheight' and
596'winminwidth'. These are hard values, a window will never become smaller.
597
598==============================================================================
5997. Argument and buffer list commands *buffer-list*
600
601 args list buffer list meaning ~
6021. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
6032. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
6043. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
6054. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
6065. :rewind / :first 15. :brewind / :bfirst to first arg/buf
6076. :last 16. :blast to last arg/buf
6087. :all 17. :ball edit all args/buffers
609 18. :unhide edit all loaded buffers
610 19. :[N]bmod [N] to Nth modified buf
611
612 split & args list split & buffer list meaning ~
61321. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
61422. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
61523. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
61624. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
61725. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
61826. :slast 36. :sblast split + to last arg/buf
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +000061927. :sall 37. :sball edit all args/buffers
Bram Moolenaar071d4272004-06-13 20:20:40 +0000620 38. :sunhide edit all loaded buffers
621 39. :[N]sbmod [N] split + to Nth modified buf
622
62340. :args list of arguments
62441. :buffers list of buffers
625
626The meaning of [N] depends on the command:
Bram Moolenaar24a98a02017-09-27 22:23:55 +0200627 [N] is the number of buffers to go forward/backward on 2/12/22/32,
628 3/13/23/33, and 4/14/24/34
Bram Moolenaar071d4272004-06-13 20:20:40 +0000629 [N] is an argument number, defaulting to current argument, for 1 and 21
630 [N] is a buffer number, defaulting to current buffer, for 11 and 31
631 [N] is a count for 19 and 39
632
633Note: ":next" is an exception, because it must accept a list of file names
634for compatibility with Vi.
635
636
637The argument list and multiple windows
638--------------------------------------
639
640The current position in the argument list can be different for each window.
641Remember that when doing ":e file", the position in the argument list stays
642the same, but you are not editing the file at that position. To indicate
643this, the file message (and the title, if you have one) shows
644"(file (N) of M)", where "(N)" is the current position in the file list, and
645"M" the number of files in the file list.
646
647All the entries in the argument list are added to the buffer list. Thus, you
648can also get to them with the buffer list commands, like ":bnext".
649
650:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
651:[N]sal[l][!] [N]
652 Rearrange the screen to open one window for each argument.
653 All other windows are closed. When a count is given, this is
654 the maximum number of windows to open.
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000655 With the |:tab| modifier open a tab page for each argument.
656 When there are more arguments than 'tabpagemax' further ones
657 become split windows in the last tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000658 When the 'hidden' option is set, all buffers in closed windows
659 become hidden.
660 When 'hidden' is not set, and the 'autowrite' option is set,
661 modified buffers are written. Otherwise, windows that have
662 buffers that are modified are not removed, unless the [!] is
663 given, then they become hidden. But modified buffers are
664 never abandoned, so changes cannot get lost.
665 [N] is the maximum number of windows to open. 'winheight'
666 also limits the number of windows opened ('winwidth' if
667 |:vertical| was prepended).
668 Buf/Win Enter/Leave autocommands are not executed for the new
669 windows here, that's only done when they are really entered.
670
671:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
672 Short for ":split | argument [N]": split window and go to Nth
673 argument. But when there is no such argument, the window is
674 not split. Also see |++opt| and |+cmd|.
675
676:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
677 Short for ":split | [N]next": split window and go to Nth next
678 argument. But when there is no next file, the window is not
679 split. Also see |++opt| and |+cmd|.
680
681:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
682:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
683 Short for ":split | [N]Next": split window and go to Nth
684 previous argument. But when there is no previous file, the
685 window is not split. Also see |++opt| and |+cmd|.
686
687 *:sre* *:srewind*
688:sre[wind][!] [++opt] [+cmd]
689 Short for ":split | rewind": split window and go to first
690 argument. But when there is no argument list, the window is
691 not split. Also see |++opt| and |+cmd|.
692
693 *:sfir* *:sfirst*
Bram Moolenaar26a60b42005-02-22 08:49:11 +0000694:sfir[st] [++opt] [+cmd]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000695 Same as ":srewind".
696
697 *:sla* *:slast*
698:sla[st][!] [++opt] [+cmd]
699 Short for ":split | last": split window and go to last
700 argument. But when there is no argument list, the window is
701 not split. Also see |++opt| and |+cmd|.
702
703 *:dr* *:drop*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000704:dr[op] [++opt] [+cmd] {file} ..
Bram Moolenaar071d4272004-06-13 20:20:40 +0000705 Edit the first {file} in a window.
706 - If the file is already open in a window change to that
707 window.
708 - If the file is not open in a window edit the file in the
709 current window. If the current buffer can't be |abandon|ed,
710 the window is split first.
Bram Moolenaar51628222016-12-01 23:03:28 +0100711 - Windows that are not in the argument list or are not full
712 width will be closed if possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000713 The |argument-list| is set, like with the |:next| command.
714 The purpose of this command is that it can be used from a
715 program that wants Vim to edit another file, e.g., a debugger.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000716 When using the |:tab| modifier each argument is opened in a
717 tab page. The last window is used if it's empty.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000718 Also see |++opt| and |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000719
720==============================================================================
7218. Do a command in all buffers or windows *list-repeat*
722
723 *:windo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100724:[range]windo {cmd} Execute {cmd} in each window or if [range] is given
725 only in windows for which the window number lies in
726 the [range]. It works like doing this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000727 CTRL-W t
728 :{cmd}
729 CTRL-W w
730 :{cmd}
731 etc.
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000732< This only operates in the current tab page.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +0000733 When an error is detected on one window, further
Bram Moolenaar071d4272004-06-13 20:20:40 +0000734 windows will not be visited.
735 The last window (or where an error occurred) becomes
736 the current window.
737 {cmd} can contain '|' to concatenate several commands.
738 {cmd} must not open or close windows or reorder them.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200739
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200740 Also see |:tabdo|, |:argdo|, |:bufdo|, |:cdo|, |:ldo|,
741 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000742
743 *:bufdo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100744:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
745 [range] is given only for buffers for which their
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100746 buffer number is in the [range]. It works like doing
Bram Moolenaara162bc52015-01-07 16:54:21 +0100747 this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000748 :bfirst
749 :{cmd}
750 :bnext
751 :{cmd}
752 etc.
753< When the current file can't be |abandon|ed and the [!]
754 is not present, the command fails.
755 When an error is detected on one buffer, further
756 buffers will not be visited.
757 Unlisted buffers are skipped.
758 The last buffer (or where an error occurred) becomes
759 the current buffer.
760 {cmd} can contain '|' to concatenate several commands.
761 {cmd} must not delete buffers or add buffers to the
762 buffer list.
763 Note: While this command is executing, the Syntax
764 autocommand event is disabled by adding it to
765 'eventignore'. This considerably speeds up editing
766 each buffer.
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200767
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200768 Also see |:tabdo|, |:argdo|, |:windo|, |:cdo|, |:ldo|,
769 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000770
771Examples: >
772
773 :windo set nolist nofoldcolumn | normal zn
774
775This resets the 'list' option and disables folding in all windows. >
776
777 :bufdo set fileencoding= | update
778
779This resets the 'fileencoding' in each buffer and writes it if this changed
780the buffer. The result is that all buffers will use the 'encoding' encoding
781(if conversion works properly).
782
783==============================================================================
7849. Tag or file name under the cursor *window-tag*
785
786 *:sta* *:stag*
787:sta[g][!] [tagname]
788 Does ":tag[!] [tagname]" and splits the window for the found
789 tag. See also |:tag|.
790
791CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
792CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200793 tag and jump to it in the new upper window.
794 In Visual mode uses the Visually selected text as a tag.
795 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000796
797 *CTRL-W_g]*
798CTRL-W g ] Split current window in two. Use identifier under cursor as a
799 tag and perform ":tselect" on it in the new upper window.
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200800 In Visual mode uses the Visually selected text as a tag.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000801 Make new window N high.
802
803 *CTRL-W_g_CTRL-]*
804CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200805 tag and perform ":tjump" on it in the new upper window.
806 In Visual mode uses the Visually selected text as a tag.
807 Make new window N high.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000808
809CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
810CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000811 Like ":split gf", but window isn't split if the file does not
Bram Moolenaar071d4272004-06-13 20:20:40 +0000812 exist.
813 Uses the 'path' variable as a list of directory names where to
814 look for the file. Also the path for current file is
815 used to search for the file name.
816 If the name is a hypertext link that looks like
817 "type://machine/path", only "/path" is used.
818 If a count is given, the count'th matching file is edited.
819 {not available when the |+file_in_path| feature was disabled
820 at compile time}
821
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000822CTRL-W F *CTRL-W_F*
823 Split current window in two. Edit file name under cursor and
824 jump to the line number following the file name. See |gF| for
825 details on how the line number is obtained.
Bram Moolenaar57657d82006-04-21 22:12:41 +0000826 {not available when the |+file_in_path| feature was disabled
827 at compile time}
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000828
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000829CTRL-W gf *CTRL-W_gf*
830 Open a new tab page and edit the file name under the cursor.
831 Like "tab split" and "gf", but the new tab page isn't created
832 if the file does not exist.
833 {not available when the |+file_in_path| feature was disabled
834 at compile time}
835
Bram Moolenaar57657d82006-04-21 22:12:41 +0000836CTRL-W gF *CTRL-W_gF*
837 Open a new tab page and edit the file name under the cursor
838 and jump to the line number following the file name. Like
839 "tab split" and "gF", but the new tab page isn't created if
840 the file does not exist.
841 {not available when the |+file_in_path| feature was disabled
842 at compile time}
843
Bram Moolenaar26967612019-03-17 17:13:16 +0100844CTRL-W gt *CTRL-W_gt*
845 Go to next tab page, same as `gt`.
846
847CTRL-W gT *CTRL-W_gT*
848 Go to previous tab page, same as `gT`.
849
Bram Moolenaar071d4272004-06-13 20:20:40 +0000850Also see |CTRL-W_CTRL-I|: open window for an included file that includes
851the keyword under the cursor.
852
853==============================================================================
85410. The preview window *preview-window*
855
856The preview window is a special window to show (preview) another file. It is
857normally a small window used to show an include file or definition of a
858function.
859{not available when compiled without the |+quickfix| feature}
860
Bram Moolenaarc270d802006-03-11 21:29:41 +0000861There can be only one preview window (per tab page). It is created with one
862of the commands below. The 'previewheight' option can be set to specify the
863height of the preview window when it's opened. The 'previewwindow' option is
864set in the preview window to be able to recognize it. The 'winfixheight'
865option is set to have it keep the same height when opening/closing other
866windows.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000867
868 *:pta* *:ptag*
869:pta[g][!] [tagname]
870 Does ":tag[!] [tagname]" and shows the found tag in a
871 "Preview" window without changing the current buffer or cursor
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000872 position. If a "Preview" window already exists, it is re-used
Bram Moolenaar071d4272004-06-13 20:20:40 +0000873 (like a help window is). If a new one is opened,
874 'previewheight' is used for the height of the window. See
875 also |:tag|.
876 See below for an example. |CursorHold-example|
877 Small difference from |:tag|: When [tagname] is equal to the
878 already displayed tag, the position in the matching tag list
879 is not reset. This makes the CursorHold example work after a
880 |:ptnext|.
881
882CTRL-W z *CTRL-W_z*
883CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
884:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
885 option is set, or when the buffer was changed and the [!] is
886 used, the buffer becomes hidden (unless there is another
887 window editing it). The command fails if any "Preview" buffer
888 cannot be closed. See also |:close|.
889
890 *:pp* *:ppop*
891:[count]pp[op][!]
892 Does ":[count]pop[!]" in the preview window. See |:pop| and
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200893 |:ptag|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000894
895CTRL-W } *CTRL-W_}*
896 Use identifier under cursor as a tag and perform a :ptag on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000897 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000898 not given, 'previewheight' is used.
899
900CTRL-W g } *CTRL-W_g}*
901 Use identifier under cursor as a tag and perform a :ptjump on
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000902 it. Make the new Preview window (if required) N high. If N is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000903 not given, 'previewheight' is used.
904
905 *:ped* *:pedit*
906:ped[it][!] [++opt] [+cmd] {file}
907 Edit {file} in the preview window. The preview window is
908 opened like with |:ptag|. The current window and cursor
909 position isn't changed. Useful example: >
910 :pedit +/fputc /usr/include/stdio.h
911<
912 *:ps* *:psearch*
913:[range]ps[earch][!] [count] [/]pattern[/]
914 Works like |:ijump| but shows the found match in the preview
915 window. The preview window is opened like with |:ptag|. The
916 current window and cursor position isn't changed. Useful
917 example: >
918 :psearch popen
919< Like with the |:ptag| command, you can use this to
920 automatically show information about the word under the
921 cursor. This is less clever than using |:ptag|, but you don't
922 need a tags file and it will also find matches in system
923 include files. Example: >
924 :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
925< Warning: This can be slow.
926
927Example *CursorHold-example* >
928
929 :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")
930
931This will cause a ":ptag" to be executed for the keyword under the cursor,
932when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
933makes other autocommands be executed, so that syntax highlighting works in the
934preview window. The "silent!" avoids an error message when the tag could not
935be found. Also see |CursorHold|. To disable this again: >
936
937 :au! CursorHold
938
939A nice addition is to highlight the found tag, avoid the ":ptag" when there
940is no word under the cursor, and a few other things: >
941
942 :au! CursorHold *.[ch] nested call PreviewWord()
943 :func PreviewWord()
944 : if &previewwindow " don't do this in the preview window
945 : return
946 : endif
947 : let w = expand("<cword>") " get the word under cursor
948 : if w =~ '\a' " if the word contains a letter
949 :
950 : " Delete any existing highlight before showing another tag
951 : silent! wincmd P " jump to preview window
952 : if &previewwindow " if we really get there...
953 : match none " delete existing highlight
954 : wincmd p " back to old window
955 : endif
956 :
957 : " Try displaying a matching tag for the word under the cursor
958 : try
959 : exe "ptag " . w
960 : catch
961 : return
962 : endtry
963 :
964 : silent! wincmd P " jump to preview window
965 : if &previewwindow " if we really get there...
966 : if has("folding")
967 : silent! .foldopen " don't want a closed fold
968 : endif
969 : call search("$", "b") " to end of previous line
970 : let w = substitute(w, '\\', '\\\\', "")
971 : call search('\<\V' . w . '\>') " position cursor on match
972 : " Add a match highlight to the word at this position
973 : hi previewWord term=bold ctermbg=green guibg=green
974 : exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
975 : wincmd p " back to old window
976 : endif
977 : endif
978 :endfun
979
980==============================================================================
98111. Using hidden buffers *buffer-hidden*
982
983A hidden buffer is not displayed in a window, but is still loaded into memory.
984This makes it possible to jump from file to file, without the need to read or
985write the file every time you get another buffer in a window.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000986
987 *:buffer-!*
988If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
989commands that start editing another file: ":edit", ":next", ":tag", etc. The
990commands that move through the buffer list sometimes make the current buffer
991hidden although the 'hidden' option is not set. This happens when a buffer is
992modified, but is forced (with '!') to be removed from a window, and
993'autowrite' is off or the buffer can't be written.
994
995You can make a hidden buffer not hidden by starting to edit it with any
996command. Or by deleting it with the ":bdelete" command.
997
998The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
999can be used to make an exception for a specific buffer. It can take these
1000values:
1001 <empty> Use the value of 'hidden'.
1002 hide Hide this buffer, also when 'hidden' is not set.
1003 unload Don't hide but unload this buffer, also when 'hidden'
1004 is set.
1005 delete Delete the buffer.
1006
1007 *hidden-quit*
1008When you try to quit Vim while there is a hidden, modified buffer, you will
1009get an error message and Vim will make that buffer the current buffer. You
1010can then decide to write this buffer (":wq") or quit without writing (":q!").
1011Be careful: there may be more hidden, modified buffers!
1012
1013A buffer can also be unlisted. This means it exists, but it is not in the
1014list of buffers. |unlisted-buffer|
1015
1016
Bram Moolenaard51cb702015-07-21 15:03:06 +02001017:files[!] [flags] *:files*
1018:buffers[!] [flags] *:buffers* *:ls*
1019:ls[!] [flags]
1020 Show all buffers. Example:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001021
Bram Moolenaar97d62492012-11-15 21:28:22 +01001022 1 #h "/test/text" line 1 ~
1023 2u "asdf" line 0 ~
1024 3 %a + "version.c" line 1 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +00001025
1026 When the [!] is included the list will show unlisted buffers
1027 (the term "unlisted" is a bit confusing then...).
1028
1029 Each buffer has a unique number. That number will not change,
Bram Moolenaar0122c402015-02-03 19:13:34 +01001030 thus you can always go to a specific buffer with ":buffer N"
1031 or "N CTRL-^", where N is the buffer number.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032
1033 Indicators (chars in the same column are mutually exclusive):
1034 u an unlisted buffer (only displayed when [!] is used)
1035 |unlisted-buffer|
1036 % the buffer in the current window
1037 # the alternate buffer for ":e #" and CTRL-^
1038 a an active buffer: it is loaded and visible
1039 h a hidden buffer: It is loaded, but currently not
1040 displayed in a window |hidden-buffer|
1041 - a buffer with 'modifiable' off
1042 = a readonly buffer
Bram Moolenaarc572da52017-08-27 16:52:01 +02001043 R a terminal buffer with a running job
1044 F a terminal buffer with a finished job
Bram Moolenaar37c64c72017-09-19 22:06:03 +02001045 ? a terminal buffer without a job: `:terminal NONE`
Bram Moolenaar071d4272004-06-13 20:20:40 +00001046 + a modified buffer
1047 x a buffer with read errors
1048
Bram Moolenaard51cb702015-07-21 15:03:06 +02001049 [flags] can be a combination of the following characters,
1050 which restrict the buffers to be listed:
1051 + modified buffers
1052 - buffers with 'modifiable' off
1053 = readonly buffers
1054 a active buffers
Bram Moolenaare392eb42015-11-19 20:38:09 +01001055 u unlisted buffers (overrides the "!")
Bram Moolenaard51cb702015-07-21 15:03:06 +02001056 h hidden buffers
1057 x buffers with a read error
1058 % current buffer
1059 # alternate buffer
Bram Moolenaar0751f512018-03-29 16:37:16 +02001060 R terminal buffers with a running job
1061 F terminal buffers with a finished job
1062 ? terminal buffers without a job: `:terminal NONE`
Bram Moolenaard51cb702015-07-21 15:03:06 +02001063 Combining flags means they are "and"ed together, e.g.:
1064 h+ hidden buffers which are modified
1065 a+ active buffers which are modified
1066
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +02001067 When using |:filter| the pattern is matched against the
1068 displayed buffer name, e.g.: >
1069 filter /\.vim/ ls
1070<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001071 *:bad* *:badd*
1072:bad[d] [+lnum] {fname}
1073 Add file name {fname} to the buffer list, without loading it.
1074 If "lnum" is specified, the cursor will be positioned at that
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001075 line when the buffer is first entered. Note that other
Bram Moolenaar071d4272004-06-13 20:20:40 +00001076 commands after the + will be ignored.
1077
1078:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
1079:bd[elete][!] [N]
1080 Unload buffer [N] (default: current buffer) and delete it from
1081 the buffer list. If the buffer was changed, this fails,
1082 unless when [!] is specified, in which case changes are lost.
1083 The file remains unaffected. Any windows for this buffer are
1084 closed. If buffer [N] is the current buffer, another buffer
1085 will be displayed instead. This is the most recent entry in
1086 the jump list that points into a loaded buffer.
1087 Actually, the buffer isn't completely deleted, it is removed
1088 from the buffer list |unlisted-buffer| and option values,
1089 variables and mappings/abbreviations for the buffer are
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001090 cleared. Examples: >
1091 :.,$-bdelete " delete buffers from the current one to
1092 " last but one
1093 :%bdelete " delete all buffers
1094<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001095
1096:bdelete[!] {bufname} *E93* *E94*
Bram Moolenaar15142e22018-04-30 22:19:58 +02001097 Like ":bdelete[!] [N]", but buffer given by name, see
1098 |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001099
1100:bdelete[!] N1 N2 ...
1101 Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
1102 buffer numbers or buffer names (but not buffer names that are
1103 a number). Insert a backslash before a space in a buffer
1104 name.
1105
1106:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
1107 |inclusive|.
1108
1109:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
1110:bw[ipeout][!] {bufname}
1111:N,Mbw[ipeout][!]
1112:bw[ipeout][!] N1 N2 ...
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00001113 Like |:bdelete|, but really delete the buffer. Everything
1114 related to the buffer is lost. All marks in this buffer
1115 become invalid, option settings are lost, etc. Don't use this
Bram Moolenaar4d84d932014-11-30 14:50:16 +01001116 unless you know what you are doing. Examples: >
1117 :.+,$bwipeout " wipe out all buffers after the current
1118 " one
1119 :%bwipeout " wipe out all buffers
1120<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001121
1122:[N]bun[load][!] *:bun* *:bunload* *E515*
1123:bun[load][!] [N]
1124 Unload buffer [N] (default: current buffer). The memory
1125 allocated for this buffer will be freed. The buffer remains
1126 in the buffer list.
1127 If the buffer was changed, this fails, unless when [!] is
1128 specified, in which case the changes are lost.
1129 Any windows for this buffer are closed. If buffer [N] is the
1130 current buffer, another buffer will be displayed instead.
1131 This is the most recent entry in the jump list that points
1132 into a loaded buffer.
1133
1134:bunload[!] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001135 Like ":bunload[!] [N]", but buffer given by name.
1136 Also see |{bufname}|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001137
1138:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
1139 |inclusive|.
1140
1141:bunload[!] N1 N2 ...
1142 Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
1143 buffer numbers or buffer names (but not buffer names that are
1144 a number). Insert a backslash before a space in a buffer
1145 name.
1146
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001147:[N]b[uffer][!] [+cmd] [N] *:b* *:bu* *:buf* *:buffer* *E86*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001148 Edit buffer [N] from the buffer list. If [N] is not given,
1149 the current buffer remains being edited. See |:buffer-!| for
1150 [!]. This will also edit a buffer that is not in the buffer
1151 list, without setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001152 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001153
Bram Moolenaar15142e22018-04-30 22:19:58 +02001154:[N]b[uffer][!] [+cmd] {bufname} *{bufname}*
1155 Edit buffer for {bufname} from the buffer list. A partial
1156 name also works, so long as it is unique in the list of
1157 buffers.
1158 Note that a buffer whose name is a number cannot be referenced
1159 by that name; use the buffer number instead.
1160 Insert a backslash before a space in a buffer name.
1161 See |:buffer-!| for [!].
1162 This will also edit a buffer that is not in the buffer list,
1163 without setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001164 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001165
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001166:[N]sb[uffer] [+cmd] [N] *:sb* *:sbuffer*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001167 Split window and edit buffer [N] from the buffer list. If [N]
1168 is not given, the current buffer is edited. Respects the
1169 "useopen" setting of 'switchbuf' when splitting. This will
1170 also edit a buffer that is not in the buffer list, without
1171 setting the 'buflisted' flag.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001172 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001173
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001174:[N]sb[uffer] [+cmd] {bufname}
Bram Moolenaar15142e22018-04-30 22:19:58 +02001175 Split window and edit buffer for |{bufname}| from the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001176 list. This will also edit a buffer that is not in the buffer
1177 list, without setting the 'buflisted' flag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001178 Note: If what you want to do is split the buffer, make a copy
1179 under another name, you can do it this way: >
1180 :w foobar | sp #
Bram Moolenaar12969c02015-09-08 23:36:10 +02001181< Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001182
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001183:[N]bn[ext][!] [+cmd] [N] *:bn* *:bnext* *E87*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001184 Go to [N]th next buffer in buffer list. [N] defaults to one.
1185 Wraps around the end of the buffer list.
1186 See |:buffer-!| for [!].
Bram Moolenaar12969c02015-09-08 23:36:10 +02001187 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001188 If you are in a help buffer, this takes you to the next help
1189 buffer (if there is one). Similarly, if you are in a normal
1190 (non-help) buffer, this takes you to the next normal buffer.
1191 This is so that if you have invoked help, it doesn't get in
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +00001192 the way when you're browsing code/text buffers. The next three
Bram Moolenaar071d4272004-06-13 20:20:40 +00001193 commands also work like this.
1194
1195 *:sbn* *:sbnext*
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001196:[N]sbn[ext] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001197 Split window and go to [N]th next buffer in buffer list.
1198 Wraps around the end of the buffer list. Uses 'switchbuf'
Bram Moolenaar12969c02015-09-08 23:36:10 +02001199 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001200
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001201:[N]bN[ext][!] [+cmd] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
1202:[N]bp[revious][!] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001203 Go to [N]th previous buffer in buffer list. [N] defaults to
1204 one. Wraps around the start of the buffer list.
1205 See |:buffer-!| for [!] and 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001206 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001207
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001208:[N]sbN[ext] [+cmd] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
1209:[N]sbp[revious] [+cmd] [N]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001210 Split window and go to [N]th previous buffer in buffer list.
1211 Wraps around the start of the buffer list.
1212 Uses 'switchbuf'.
Bram Moolenaar12969c02015-09-08 23:36:10 +02001213 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001214
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001215:br[ewind][!] [+cmd] *:br* *:brewind*
1216 Go to first buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001217 empty, go to the first unlisted buffer.
1218 See |:buffer-!| for [!].
1219
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001220:bf[irst] [+cmd] *:bf* *:bfirst*
1221 Same as |:brewind|.
1222 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001223
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001224:sbr[ewind] [+cmd] *:sbr* *:sbrewind*
1225 Split window and go to first buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001226 buffer list is empty, go to the first unlisted buffer.
1227 Respects the 'switchbuf' option.
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001228 Also see |+cmd|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001229
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001230:sbf[irst] [+cmd] *:sbf* *:sbfirst*
1231 Same as ":sbrewind".
Bram Moolenaar071d4272004-06-13 20:20:40 +00001232
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001233:bl[ast][!] [+cmd] *:bl* *:blast*
1234 Go to last buffer in buffer list. If the buffer list is
Bram Moolenaar071d4272004-06-13 20:20:40 +00001235 empty, go to the last unlisted buffer.
1236 See |:buffer-!| for [!].
1237
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001238:sbl[ast] [+cmd] *:sbl* *:sblast*
1239 Split window and go to last buffer in buffer list. If the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001240 buffer list is empty, go to the last unlisted buffer.
1241 Respects 'switchbuf' option.
1242
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001243:[N]bm[odified][!] [+cmd] [N] *:bm* *:bmodified* *E84*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001244 Go to [N]th next modified buffer. Note: this command also
1245 finds unlisted buffers. If there is no modified buffer the
1246 command fails.
1247
Bram Moolenaar9c8d9e12014-09-19 20:07:26 +02001248:[N]sbm[odified] [+cmd] [N] *:sbm* *:sbmodified*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001249 Split window and go to [N]th next modified buffer.
1250 Respects 'switchbuf' option.
1251 Note: this command also finds buffers not in the buffer list.
1252
1253:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
1254:[N]sun[hide] [N]
1255 Rearrange the screen to open one window for each loaded buffer
1256 in the buffer list. When a count is given, this is the
1257 maximum number of windows to open.
1258
1259:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
1260:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
1261 the buffer list. When a count is given, this is the maximum
1262 number of windows to open. 'winheight' also limits the number
1263 of windows opened ('winwidth' if |:vertical| was prepended).
1264 Buf/Win Enter/Leave autocommands are not executed for the new
1265 windows here, that's only done when they are really entered.
Bram Moolenaar756ec0f2007-05-05 17:59:48 +00001266 When the |:tab| modifier is used new windows are opened in a
Bram Moolenaarfd2ac762006-03-01 22:09:21 +00001267 new tab, up to 'tabpagemax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268
1269Note: All the commands above that start editing another buffer, keep the
1270'readonly' flag as it was. This differs from the ":edit" command, which sets
1271the 'readonly' flag each time the file is read.
1272
1273==============================================================================
127412. Special kinds of buffers *special-buffers*
1275
1276Instead of containing the text of a file, buffers can also be used for other
1277purposes. A few options can be set to change the behavior of a buffer:
1278 'bufhidden' what happens when the buffer is no longer displayed
1279 in a window.
1280 'buftype' what kind of a buffer this is
1281 'swapfile' whether the buffer will have a swap file
1282 'buflisted' buffer shows up in the buffer list
1283
1284A few useful kinds of a buffer:
1285
Bram Moolenaar280f1262006-01-30 00:14:18 +00001286quickfix Used to contain the error list or the location list. See
1287 |:cwindow| and |:lwindow|. This command sets the 'buftype'
1288 option to "quickfix". You are not supposed to change this!
1289 'swapfile' is off.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001290
1291help Contains a help file. Will only be created with the |:help|
1292 command. The flag that indicates a help buffer is internal
1293 and can't be changed. The 'buflisted' option will be reset
1294 for a help buffer.
1295
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +02001296terminal A terminal window buffer, see |terminal|. The contents cannot
1297 be read or changed until the job ends.
1298
Bram Moolenaar677ee682005-01-27 14:41:15 +00001299directory Displays directory contents. Can be used by a file explorer
Bram Moolenaar071d4272004-06-13 20:20:40 +00001300 plugin. The buffer is created with these settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001301 :setlocal buftype=nowrite
1302 :setlocal bufhidden=delete
1303 :setlocal noswapfile
Bram Moolenaar071d4272004-06-13 20:20:40 +00001304< The buffer name is the name of the directory and is adjusted
1305 when using the |:cd| command.
1306
1307scratch Contains text that can be discarded at any time. It is kept
1308 when closing the window, it must be deleted explicitly.
1309 Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001310 :setlocal buftype=nofile
1311 :setlocal bufhidden=hide
1312 :setlocal noswapfile
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001313< The buffer name can be used to identify the buffer, if you
1314 give it a meaningful name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001315
1316 *unlisted-buffer*
1317unlisted The buffer is not in the buffer list. It is not used for
1318 normal editing, but to show a help file, remember a file name
1319 or marks. The ":bdelete" command will also set this option,
1320 thus it doesn't completely delete the buffer. Settings: >
Bram Moolenaar8ada17c2006-01-19 22:16:24 +00001321 :setlocal nobuflisted
Bram Moolenaar071d4272004-06-13 20:20:40 +00001322<
1323
Bram Moolenaard473c8c2018-08-11 18:00:22 +02001324 vim:tw=78:ts=8:noet:ft=help:norl: