-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 . "%*")
+vim9script
+
+export def Do(): string
+ var bufsRaw = execute("buffers", "silent")
+ var bufs: list<string>
+ var leftIdx: number
+ var rightIdx: number
+ var filename: string
+ var linenum: string
+ var attrs: list<string>
+ var attr: string
+ var hl: string
+ for buf in split(bufsRaw, "\n")[ : 16]
+ leftIdx = stridx(buf, '"')
+ rightIdx = strridx(buf, '"')
+ filename = substitute(buf[leftIdx + 1 : rightIdx - 1], "%", "%%", "g")
+ linenum = split(buf[rightIdx : ], " ")[-1]
+ attrs = split(buf[ : 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, " ")
-endfunction
+enddef