cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

よじれた実験:コマンド補完関数の中でコマンド補完関数を呼ぶ

コマンド補完関数の中で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

何かに使えないかと思ったけど、今のところ使い道は見つかっていない。
'=' で引数を受けられるオプションの補完に使えないかなーって頑張ったんだけど。