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にクローズされました