Closed3
Vimのtablineにバッファを表示する

プラグインでは定番のtablineにバッファを表示するやつです。
プラグインのない環境でも.vimrcに追加すれば動きます。
中身としてはlsコマンドでバッファ一覧を取得してtablineに設定しているだけですね。
function! BufferTabLine()
let buffer_tabline = ''
let sep = '|'
let s:buffer_info = s:GetBufferName()
for i in s:buffer_info
if i[3] == 1
let buffer_tabline = buffer_tabline . '%#TabLineSel#'
else
let buffer_tabline = buffer_tabline . '%#TabLine#'
endif
let buffer_tabline = buffer_tabline . i[0] . ': ' . i[1]
if i[2] == 1
let buffer_tabline = buffer_tabline . ' +'
endif
let buffer_tabline = buffer_tabline . sep
endfor
let buffer_tabline = buffer_tabline . '%#TabLineFill#%T'
let buffer_tabline = buffer_tabline . '%=buffers'
return buffer_tabline
endfunction
function! s:GetBufferName()
let s:buffers = execute('ls')
let s:result = []
let s:buffer_list = split(s:buffers, "\n")
for b in s:buffer_list
let s:buffer_line = split(b)
let s:buffer_num = s:buffer_line[0]
let s:buffer_name = ''
let s:current_buffer = 0
let s:edit_flag = 0
for i in s:buffer_line
if i == '%a'
let s:current_buffer = 1
elseif i == '+'
let s:edit_flag = 1
elseif i[0] == '"'
let s:path = substitute(i, '"', '', 'g')
let s:name_path = split(s:path, '/')
let s:buffer_name = s:name_path[len(s:name_path) - 1]
else
endif
endfor
let s:result = add(s:result, [s:buffer_num, s:buffer_name, s:edit_flag, s:current_buffer])
endfor
return s:result
endfunction
set tabline=%!BufferTabLine()

Vim8以前だとexeute()が使えないのでリダイレクトします。
redir => s:buffers
silent ls
redir END

neovimにも対応するためluaで書き直しました。
local api = vim.api
vim.o.tabline = "%!v:lua.BufferTabLine()"
function _G.BufferTabLine()
local buffer_tabline = ""
local sep = "|"
local buffers_num = api.nvim_list_bufs()
for _, buf_num in ipairs(buffers_num) do
if api.nvim_buf_is_loaded(buf_num) then
--- 選択しているバッファである場合、ハイライトを変える
local current_buf_num = api.nvim_get_current_buf()
if buf_num == current_buf_num then
buffer_tabline = buffer_tabline .. "%#TabLineSel#"
else
buffer_tabline = buffer_tabline .. "%#TabLine#"
end
--- バッファ番号、バッファ名を表示
local buf_name = vim.fn.fnamemodify(api.nvim_buf_get_name(buf_num), ":t")
buffer_tabline = buffer_tabline .. buf_num .. ":" .. buf_name
--- バッファに変更が加えられている場合、"+"を表示
local modified = api.nvim_buf_get_option(buf_num, "modified")
if modified then
buffer_tabline = buffer_tabline .. "+"
end
buffer_tabline = buffer_tabline .. sep
end
end
buffer_tabline = buffer_tabline .. "%#TabLineFill#%T" .. "%=buffers"
return buffer_tabline
end
このスクラップは2024/01/04にクローズされました