aboutsummaryrefslogtreecommitdiff

NVIM Buffer Browse

:b# on steroids. Browse your buffers like you browse history in a browser.

Motivation

While :bnext and :bprev allows you to browse between buffers, it is not very intuitive. Oftentimes I jump to definitions and :bprev would then end up in a completely different file, because buffers are ordered by when they are opened, not by history. :b#, <Ctrl-6> and <Ctrl-O> works only assuming you didn't navigate around further.

I wanted to be able to browse buffers in a way that is similar to how you browse tabs in a browser.

Usage

This plugin implements two functions: require('buffer-browser').next() and require('buffer-browser').prev().

You can easily map these to whatever you want. Here is an example init.lua:

vim.keymap.set('n', '<leader>b]', require("buffer_browser").next, {desc = "Next [B]uffer []]"})
vim.keymap.set('n', '<leader>b[', require("buffer_browser").prev, {desc = "Previous [B]uffer [[]"})

Use these to navigate your buffer history in the order that you opened them.

Splits

If a split has been performed, the new split will not preserve any of the previous history.

Installation

Install through any of your favorite plugin managers.

lazy.

Add the following line in your require('lazy').setup call

{
    'https://git.sr.ht/~marcc/BufferBrowser',
}

Then run somewhere in your init.lua run the setup:

require('buffer_browser').setup()

Configuration

You can configure the filetype_filters by passing a table to the setup function. This is the default config:

require('buffer-browser').setup({
    filetype_filters = {'gitcommit', 'TelescopePrompt'}
})

This can be used to filter out buffers you do not want in the history.

Removing Netrw buffers

By default, BufferBrowser will remember Netrw buffers. To immediately close netrw after you have opened a file, you can add to init.lua

vim.g.netrw_fastbrowse=0

This will remove the netrw buffer and wipe it from the browser history when you open a new file.

Credits

The plugin is mostly a copy of ton/vim-bufsurf, but rewritten in Lua and adds the ability to filter unwanted filetypes.