Closed2
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
このスクラップは2024/01/04にクローズされました