現在、最も人気のあるバッファラインプラグインは akinsho/bufferline ですが、私はそれが重すぎて見た目も良くないと感じています。例えば、LSP と統合したり、さまざまなタブ / バッファモードを切り替えたりすることができますが、必ずしもすべての人が必要とするわけではありませんし、順序も固定されています。つまり、私は自分で作りたいのです:fzdwx/bufline.nvim
nvim で tabline を定義するには、vim.opt.tabline=xxx
を使用します。例えば、以下のコードを使用して簡単にバッファラインを実現できます:
function _G.qweqweqwe()
return "this is my line"
end
-- config
vim.opt.tabline = "%!v:lua.qweqweqwe()"
次に、次のことを簡単に考えることができます:
- すべてのバッファを取得する
- バッファに対応するファイルの情報を取得する
- ファイル名など
- ファイルアイコンを表示する(nvim-tree/nvim-web-deviconsによってサポートされています)
- ハイライトのサポート
実装方法については割愛しますが、興味がある場合はこちらをご覧ください:fzdwx/bufline.nvim。現在、すべてのコンテンツはカスタマイズ可能です:
M.folder -- 入力はバッファの数で、Group: {hl,str}を返す必要があります
M.dirName -- 入力は現在のバッファIDで、Groupを返す必要があります
M.devicon -- 入力は現在のバッファID、"Sel/NoSel"、選択されているかどうかで、Groupを返す必要があります
M.title -- 入力は現在のバッファID、"Sel/NoSel"で、Groupを返す必要があります
M.modified -- 入力は現在のバッファIDで、strを返す必要があります
M.separator -- Groupを返す必要があります
-- 以下の2つのメソッドもカスタマイズ可能ですが、ユーザー自身が正確性を保証する必要があります
M.cell -- 各バッファに対応する情報、入力は現在のバッファID、現在選択されているバッファIDで、groupのリストを返す必要があります
M.bufline -- バッファライン全体を構築する
str
は具体的な内容を表し、hl
はハイライトタグを表します。例えば、BufLineFolder
は現在サポートされています:
BufLineTitleSel
BufLineTitleNoSel
BufLineFill
BufLine
BufLineFolder
これらのハイライトタグにはデフォルトの設定がありませんので、ユーザーがカスタマイズする必要があります。例えば:
vim.cmd([[au ColorScheme * hi BufLineTitleSel gui=none guibg='#282C34' guifg='#5C6370']])
アイコンの背景を空に設定すると、背景色のあるアイコンとないアイコンが大きさが異なる問題が発生しましたが、仕方がないので、選択されていないバッファもバッファラインと同じように色を付けることにしました。
遅延ロードで使用する場合:
{
"fzdwx/bufline.nvim",
event = "BufEnter",
dependencies = {
"nvim-tree/nvim-web-devicons",
},
config = function()
local buf = require("bufline")
buf.setup({
-- カスタムセパレータ
separator = function()
return {
str = '',
hl = ""
}
end
})
end,
},