コマンド補完関数の中でfeedkeys()が使えることが分かった。
ただし、feedkeys()のキー入力が開始されるのは補完が始まった後。
feedkeys()のキー入力によって補完は終了してしまう。
ただし、オプション 'wildcharm' の値を変更することで feedkeys()から補完を再度呼び出せることが分かった。
末尾に '=' が含まれると空白を挟んで 'a' 'b' 'c' を補完する補完関数の例。
function! Cmpl(arglead, cmdline, curpos) if a:arglead =~# "\<C-x>" let &wcm = s:save_wcm return ['a', 'b', 'c'] end if a:arglead =~# '=$' let s:save_wcm = &wcm let &wcm = char2nr("\<Tab>") call feedkeys(" \<C-v>\<C-x>\<Tab>", 'n') return [a:arglead] end return [] endfunction
何かに使えないかと思ったけど、今のところ使い道は見つかっていない。
'=' で引数を受けられるオプションの補完に使えないかなーって頑張ったんだけど。