我正在寻找为 VIM 创建一个自定义的全向补全,并且我想做实际的工作来查找要在另一个程序中完成的可能匹配项。解决此问题的最佳方法是什么?
到目前为止,我的想法是创建一个 vimscript,将整个缓冲区和光标位置发送到外部脚本。但是,我找不到比使用更有效的方法来获取缓冲区join(getline(0, line('$')), '\n')
,这在大文件上非常慢。如果你有兴趣,我到目前为止:
自动完成 vimscript:
fun! MyComplete(findstart, base)
let line = getline('.')
let start = col('.') - 1
while start > 0 && line[start - 1] =~ '\a'
let start -= 1
endwhile
if a:findstart
return start
else
let result = system('java AutoComplete '.shellescape(expand('%')).' '.line('.').' '.start, 'File sourcecode here')
let res = []
for m in split(result)
if m =~ '^' . a:base
call add(res, m)
endif
endfor
return res
endif
endfun
set completefunc=MyComplete
自动完成.java:
class AutoComplete {
public static void main(String[] argv) {
// To be expanded into an amazing program...
System.out.print("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec");
}
}