nvim bufferline 设置过滤条件

今天在写代码的时候,遇到一个有趣的事情:有时候我们只打开一个文件,但是 bufferline 也会显示该文件相关的操作。

bufferline
bufferline

过滤条件

其实 bufferline 有提供了一个 custom_filter 的过滤机制,允许我们通过设置一定的条件,不要显示文件。这个回调函数提供了两个参数

  • buf_number: 当前 buffer 的下标
  • buf_numbers: 包含所有 buffer 的一个列表信息

可以实现的过滤条件有:

  • 文件类型
  • 目录
  • 以及我们这次讨论的基于数量的过滤

bufferline-noshow
bufferline-noshow

实现

通过对比 buf_numbers 的数量,返回一个布尔值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
config = function()
    local bufferline = require("bufferline")
    require("bufferline").setup({
        options = {
            custom_filter = function(buf_number, buf_numbers)
                if #(buf_numbers) < 2 then
                    return false
                end
                return true
            end,
        }
    })
end

全部的代码可以参考:

 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
return {
    'akinsho/bufferline.nvim',
    dependencies = {
        'nvim-tree/nvim-web-devicons',
        "famiu/bufdelete.nvim",
    },
    enabled = true,
    event = "BufRead",
    config = function()
        local bufferline = require("bufferline")
        require("bufferline").setup({
            options = {
                custom_filter = function(buf_number, buf_numbers)
                    --如果是defx则隐藏
                    local finded, _ = string.find(vim.bo[buf_number].filetype, "defx")
                    if finded ~= nil then
                        return false
                    end
                    -- filter out filetypes you don't want to see
                    -- if vim.bo[buf_number].filetype ~= "<i-dont-want-to-see-this>" then
                    --     return true
                    -- end
                    -- filter out by buffer name
                    -- if vim.fn.bufname(buf_number) ~= "<buffer-name-I-dont-want>" then
                    --     return true
                    -- end
                    -- filter out based on arbitrary rules
                    -- e.g. filter out vim wiki buffer from tabline in your work repo
                    -- if vim.fn.getcwd() == "<work-repo>" and vim.bo[buf_number].filetype ~= "wiki" then
                    --     return true
                    -- end
                    -- filter out by it's index number in list (don't show first buffer)
                    -- if buf_numbers[1] ~= buf_number then
                    --     return false
                    -- end
                    -- do not show when total buffer number is 1
                    if #(buf_numbers) < 2 then
                        return false
                    end
                    return true
                end,
        })
    end,
}
william 支付宝支付宝
william 微信微信
0%