]> Sergey Matveev's repositories - dotfiles.git/blobdiff - vim/.vim/plugin/buftabline.vim
Simplify format of .zhashd
[dotfiles.git] / vim / .vim / plugin / buftabline.vim
index 2c28fd3ef30a7e3b9929c943f47d208def3055e2..24a3547376ea0271b65b27c6ddf619ddb9e9d7a6 100644 (file)
@@ -1,27 +1,23 @@
+if exists("g:loaded_mein_buftabline") | finish | endif
+let g:loaded_mein_buftabline = 1
+
 function! BufTabline()
     redir => bufsRaw
     silent buffers
     redir END
     let bufs = []
-    for buf in split(bufsRaw, "\n")
-        let buf = substitute(buf, "\"", "", "g")
-        let ents = []
-        for ent in split(buf, " ")
-            if len(ent) == 0 | continue | endif
-            let ents = add(ents, substitute(ent, "%", "%%", "g"))
-        endfor
-        let ents[-3] = ents[-3] . ":" . ents[-1]
-        let ents = ents[:-3]
-        if len(ents) == 4 | let ents = [ents[0], ents[1] . ents[2], ents[3]] | endif
-        if len(ents) == 3 | let ents = [ents[0] . ":" . ents[1], ents[2]] | endif
-        let ents[0] = "%#TabLine#" . ents[0] . "%*"
-        if len(ents[1]) > 20 | let ents[1] = "<" . ents[1][-19:] | endif
-        if match(ents[0], "%%") == -1
-            let ents[1] = "%#TabLine#:" . ents[1] . "%*"
-        else
-            let ents[1] = "%#TabLineSel#" . ents[1] . "%*"
-        endif
-        let bufs = add(bufs, join(ents[:1], ""))
+    for buf in split(bufsRaw, "\n")[:16]
+        let leftIdx = stridx(buf, '"')
+        let rightIdx = strridx(buf, '"')
+        let filename = substitute(buf[leftIdx + 1 : rightIdx - 1], "%", "%%", "g")
+        let linenum = split(buf[rightIdx:], " ")[-1]
+        let attrs = split(buf[:leftIdx-1], '\s\+')
+        let attrs = map(attrs, 'substitute(v:val, "%", "%%", "g")')
+        let attrs = (len(attrs) == 1) ? attrs[0] : attrs[0] . ":" . join(attrs[1:], "")
+        let attrs = "%#TabLine#" . attrs . "%*"
+        if len(filename) > 20 | let filename = "<" . filename[-(20-1):] | endif
+        let hl = (match(attrs, "%%") == -1) ? "%#TabLine#:" : "%#TabLineSel#"
+        let bufs = add(bufs, attrs . hl . filename . ":" . linenum . "%*")
     endfor
     return join(bufs, "  ")
 endfunction