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