fzdwx

fzdwx

Hello , https://github.com/fzdwx

自定义一个 Neovim bufferline

现在比较流行的 buffer line 插件是 akinsho/bufferline, 但是我感觉他太重了,而且不好看。比如说它可以跟 lsp 集成,可以切换各种 tab/buffer 模式等,但是不一定每个人都需要,而且各个顺序都固定了,总之就是我想造轮子: fzdwx/bufline.nvim

在 nvim 中定义 tabline 可以使用 vim.opt.tabline=xxx 来设置,比如说下面这段代码,就很容易的实现一个 buffer line:

function _G.qweqweqwe()
	retrun "this is my line"
end

-- config
vim.opt.tabline = "%!v:lua.qweqweqwe()"

那么接下来就很容易想到:

  1. 获取所有 buffer
  2. 获取 buffer 对应文件的信息
  3. 支持高亮

如何实现的就不赘述了,如果有兴趣可以查看: fzdwx/bufline.nvim. 目前所有的内容都可以自定义:

M.folder  -- 入参是 buffer 数量,要求返回 Group: {hl,str}
M.dirName -- 入参是当前 buffer id, 要求返回 Group
M.devicon -- 入参是当前 buffer id,"Sel/NoSel",是否选中, 要求返回 Group
M.title   -- 入参是当前 buffer id,"Sel/NoSel", 要求返回 Group
M.modified  -- 入参是当前 buffer id, 要求返回 str
M.separator -- 要求返回 Group

-- 下面这两个方法也可以自定义,需要用户自己保证正确性
M.cell  -- 每个 buffer 对应的信息,入参是当前 buffer id,当前选择的buffer id,要求返回 group 列表
M.bufline -- 构造整个 bufline

str 就是具体内容,hl 就是要高亮标签,例如 BufLineFolder当前支持:

BufLineTitleSel  
BufLineTitleNoSel  
BufLineFill  
BufLine  
BufLineFolder

这些高亮标签都没有默认设置,需要用户自定义,例如:

vim.cmd([[au ColorScheme * hi BufLineTitleSel gui=none guibg='#282C34' guifg='#5C6370']])

设置高亮遇到的问题,当设置 icon 的背景为空时,有背景颜色的 icon 跟没有的会一大一小,后来没办法,只能让它都开启颜色的,也就是没选中的 buffer 也会开启颜色跟 bufferline 的一样.

在 lazy 中使用:

{  
    "fzdwx/bufline.nvim",  
    event = "BufEnter",  
    dependencies = {  
        "nvim-tree/nvim-web-devicons",  
    },  
    config = function()  
        local buf = require("bufline")  
        buf.setup({  
            -- 自定义 separator
            separator = function()  
                return {  
                    str = '',  
                    hl = ""  
                }  
            end  
        })  
    end,  
},
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。