vim9script export def Do(): string var bufsRaw = execute("buffers", "silent") var bufs: list var leftIdx: number var rightIdx: number var filename: string var linenum: string var attrs: list var attr: string var hl: string for buf in split(bufsRaw, "\n")[ : 16] leftIdx = stridx(buf, '"') rightIdx = strridx(buf, '"') filename = substitute( strpart(buf, leftIdx + 1, rightIdx - leftIdx - 1), "%", "%%", "g") linenum = split(strpart(buf, rightIdx), " ")[-1] attrs = split(strpart(buf, 0, leftIdx - 1), '\s\+') attrs = map(attrs, 'substitute(v:val, "%", "%%", "g")') attr = (len(attrs) == 1) ? attrs[0] : attrs[0] .. ":" .. join(attrs[1 :], "") attr = "%#TabLine#" .. attr .. "%*" if len(filename) > 20 | filename = "<" .. filename[-(20 - 1) :] | endif hl = (match(attr, "%%") == -1) ? "%#TabLine#:" : "%#TabLineSel#" bufs = add(bufs, attr .. hl .. filename .. ":" .. linenum .. "%*") endfor return join(bufs, " ") enddef