/nvim-bufdel

A Neovim plugin to improve buffer deletion

Primary LanguageLuaBSD 2-Clause "Simplified" LicenseBSD-2-Clause

nvim-bufdel

A small Neovim plugin to improve the deletion of buffers.

Improvements:

  • Preserve the layout of windows. Deleting a buffer will no longer close any window unexpectedly (see demo).
  • Cycle through buffers according to their number (configurable). This is especially helpful when using a bufferline: we get the same behavior as closing tabs in Chrome / Firefox (see demo).
  • Terminal buffers are deleted without prompt.
  • Exit Neovim when last buffer is deleted (configurable).
  • Add commands to close all listed buffers and to close them all except the current one.

demo

Here the same buffer is displayed in left and top-right window. Deleting that buffer preserves the window layout and the first buffer with a number greater than the deleted one is selected instead (the one immediately to the right in the bufferline).

Installation

With packer.nvim:

use {'ojroques/nvim-bufdel'}

With paq-nvim:

paq {'ojroques/nvim-bufdel'}

Usage

Delete the current buffer:

:BufDel

Delete the current buffer and ignore changes:

:BufDel!

Delete a buffer by its name or number (use quotes in case the buffer name is a number):

:BufDel <bufexpr>

Delete all listed buffers (add ! to ignore changes):

:BufDelAll

Delete all listed buffers except the current one (add ! to ignore changes):

:BufDelOthers

Configuration

You can pass options to the setup() function. Here are the default options:

require('bufdel').setup {
  next = 'tabs',
  quit = true,  -- quit Neovim when last buffer is closed
}

The next option determines the next buffer to display after deletion. Supported values:

  • cycle: cycle through buffers according to their number.
  • tabs (default): like cycle but when the buffer with highest number is deleted, display the new highest buffer instead of going back to the first one.
  • alternate: switch to the alternate buffer (same behavior as without the plugin).
  • You can also pass your own function to select the next buffer.