Open2

Denops で .vimrc を書く方法の模索

momongamomonga

基本方針は以下の通りとなる

Denops は自動的に runtimepath 内の denops/*/main.ts を読み込む(参照)ため、vimrc 代替用の main.ts を適当な箇所に配置し、init.vim には runtimepath の変更および denops.vim 自体のロードなど、必要最低限な設定を記述しておく。

denops_std として setmap などのコマンドを呼び出すための便利な標準ライブラリが提供されているため、main.ts 内の main メソッドにて、これらを利用することができる。これにより、TypeScript で Vim の設定を直接変更することができる。

Vim script による関数定義と、各種 hook などによる関数呼び出しの設定に関しては、まず denops.dispatchers で関数の処理本体を定義し、その後以下のようにして denops.exec を利用しラッパー関数を定義することで実現できるのではないか。(要検証)

// echo dispatcher のラッパー関数を定義
await execute(
  denops,
  `fu! DispatchEcho()\n denops#request('helloworld', 'echo', ["Hello Denops!"])\n endf`
);

// プラグインの Hook 関数などに指定
await globals.set(
  denops,
  "fooplugin_hoge_func",
  funcref(denops, 'DispatchEcho')
);
momongamomonga

ラッパー関数の定義と funcref 取得は lambda でも良いかもしれない