aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 16bb3d5dbb27735fb944d2762d676edad577e6f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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 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`:
```lua
vim.api.nvim_set_keymap('n', '<leader>b[', require("buffer_browser").next(), {desc = "Next [B]uffer [[]"})
vim.api.nvim_set_keymap('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.

## Insallation

Install through any of your favorite plugin managers. 

### [lazy](https://www.lazyvim.org). 

Make sure to run the setup function. For example with lazy:

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

Then run 

```lua
require('buffer_browser').setup()
```


### Configuration 

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

```lua
require('buffer-browser').setup({
    -- '' + 'netrw' is used to filter out netrw.
    filetype_filters = ['', 'netrw', 'gitcommit', 'TelescopePrompt']
})
```

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

#### Limitation

To filter out netrw, we need to also filter out `''`, as the filetype
occassionally gets set to that by netrw (not sure why...). This means files
without filetype are filtered out.

## Credits 

The plugin is mostly a copy of
[ton/vim-bufsurf](https://github.com/ton/vim-bufsurf), but rewritten in Lua and
adds the ability to filter unwanted filetypes to get rid of netrw buffers.