私は 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");
}
}