自定义一个 Neovim bufferline

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

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

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

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

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

获取所有 buffer

获取 buffer 对应文件的信息

比如说文件名称

显示文件 icon (由 nvim-tree/nvim-web-devicons 支持)

支持高亮

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

Copy
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当前支持：

Copy
BufLineTitleSel
BufLineTitleNoSel
BufLineFill
BufLine
BufLineFolder

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

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

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

在 lazy 中使用:

Copy
{
"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,
},