]> Sergey Matveev's repositories - dotfiles.git/blob - vim/.vim/plugin/buftabline.vim
4fb131802a35e025c992b2a148a7b3b66307f6c8
[dotfiles.git] / vim / .vim / plugin / buftabline.vim
1 if exists('*<SID>BufTabLine') | finish | endif
2
3 function! s:BufTabline()
4     redir => bufsRaw
5     silent buffers
6     redir END
7     let bufs = []
8     for buf in split(bufsRaw, "\n")[:16]
9         let leftIdx = stridx(buf, '"')
10         let rightIdx = strridx(buf, '"')
11         let filename = substitute(buf[leftIdx + 1 : rightIdx - 1], "%", "%%", "g")
12         let linenum = split(buf[rightIdx:], " ")[-1]
13         let attrs = split(buf[:leftIdx-1], '\s\+')
14         let attrs = map(attrs, 'substitute(v:val, "%", "%%", "g")')
15         let attrs = (len(attrs) == 1) ? attrs[0] : attrs[0] . ":" . join(attrs[1:], "")
16         let attrs = "%#TabLine#" . attrs . "%*"
17         if len(filename) > 20 | let filename = "<" . filename[-(20-1):] | endif
18         let hl = (match(attrs, "%%") == -1) ? "%#TabLine#:" : "%#TabLineSel#"
19         let bufs = add(bufs, attrs . hl . filename . ":" . linenum . "%*")
20     endfor
21     return join(bufs, "  ")
22 endfunction
23
24 function! BufTabline()
25     return s:BufTabline()
26 endfunction
27
28 set showtabline=2
29 set tabline=%!BufTabline()