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,  
},
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。