]> Sergey Matveev's repositories - dotfiles.git/blobdiff - vim/.vim/autoload/buftabline.vim
Vim scripts refactoring
[dotfiles.git] / vim / .vim / autoload / buftabline.vim
diff --git a/vim/.vim/autoload/buftabline.vim b/vim/.vim/autoload/buftabline.vim
new file mode 100644 (file)
index 0000000..7098d7b
--- /dev/null
@@ -0,0 +1,18 @@
+function! buftabline#do()
+    let bufsRaw = execute("buffers", "silent")
+    let bufs = []
+    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