vim9script def GetMatch(b: string, l: string): list var s = b while stridx(l, s) == -1 s = strpart(s, 1) if strlen(s) == 0 return [0, ""] endif endwhile const idx = stridx(l, s) const slen = strlen(s) return [slen, b .. strpart(l, idx + slen)] enddef export def WholeLineCompl(f: bool, b: string): any if f return 0 endif return getline(0, '$') ->sort() ->uniq() ->map( (_, v) => GetMatch(b, v) ) ->sort( (x, y) => y[0] - x[0] ) ->map( (_, v) => v[1] ) enddef setlocal completefunc=WholeLineCompl