引数が であるため、補完機能に十分な情報が渡されています。コマンドラインの現在のカーソル位置が であることがわかっている場合は、現在編集中の の引数の数を調べることができます。ここでは、その番号を という唯一の補完候補として返す関数です。
" Custom completion function for the command 'Foo'
function! FooComplete(arg, line, pos)
let l = split(a:line[:a:pos-1], '\%(\%(\%(^\|[^\\]\)\\\)\@<!\s\)\+', 1)
let n = len(l) - index(l, 'Foo') - 1
return [string(n)]
endfunction
(彼らはすでに書かれている場合) 特定の引数を完了関数のいずれかを呼び出して、最後の行に置き換えます。これらの範囲の限界、又はカウント(スペースの両方で許可 ある)、場合かもしれないので、 コマンド名の前に空白で区切られた単語を無視する必要があること、例えば、
let funcs = ['FooCompleteFirst', 'FooCompleteSecond']
return call(funcs[n], [a:arg, a:line, a:pos])
注コマンドにはその1つがあります。
コマンドラインを引数に分割するために使用される正規表現は、引数の一部である アカウントのエスケープされた空白を受け取り、 のセパレータではありません。 (もちろん、補完関数は、 の引数が複数ある場合には通常どおり、 候補の空白をエスケープする必要があります)
ありがとう!私はこれから実際的な解決策を得ることができます、より後で調査します。 – centerback