29 lines
625 B
VimL
29 lines
625 B
VimL
|
vim9script
|
||
|
|
||
|
def GetMatch(b: string, l: string): list<any>
|
||
|
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
|