vim9script def GetMatch(base: string, line: string): list var s = base while stridx(line, s) == -1 s = strpart(s, 1) if strlen(s) == 0 return [0, ""] endif endwhile const idx = stridx(line, s) const slen = strlen(s) return [slen, base .. strpart(line, idx + slen)] enddef def LineSuffixCompl(findstart: bool, base: string): any if findstart return 0 endif return getbufinfo() ->map( (_, buf) => getbufline(buf["bufnr"], 1, "$")) ->flattennew() ->sort() ->uniq() ->map( (_, v) => GetMatch(base, v) ) ->sort( (x, y) => y[0] - x[0] ) ->map( (_, v) => v[1] ) enddef setlocal completefunc=LineSuffixCompl