よさげなレポジトリを発見した。

https://github.com/RMichelsen/Nvy

だいぶ前に作ろうとして頓挫した

https://github.com/ousttrue/nvim-dx

の完成形。 どこがうまくいかなかったのか忘れてしまったが。

改造

https://github.com/ousttrue/Nvy

20210815

MsgPack-RPC のバックエンドに昔作った

https://github.com/ousttrue/msgpack-rpc-asio

におきかえる。

さらに、これのシリアライザーを自前の https://github.com/ousttrue/msgpackpp におきかえる。

  • CMake 化

  • RPC を c++20 化 (co_await)

で、最初の nvim 初期化を

auto api_info = co_await rpc.request("nvim_get_api_info");
rpc.notity("nvim_set_var", "nvy", 1);
auto path = co_await rpc.request("nvim_eval","stdpath('config')");

// initialize

rpc.notify("nvim_ui_attach");

rpc.on_message(&dispatcher);

のように書けるようにして整理する。

20210829

  • MsgPack-RPC のバックエンドを置きかえた

  • logger に RPC の内容を JSON 化して表示

だいたいリファクタリングが終わって改造しやすい状態になった。

  • <C-/> できるようにする。

を実装できた。 特定の VK が来たときに nvim のキーに変換するテーブルがあるので追加した。

  case VK_OEM_2:
    return "";

[2,"nvim_input",["<C-/>"]] が送信される。

修正が必要

非control時に

[2,"nvim_input",["</>"]] が送信される。

  case VK_OEM_2:
    if (GetKeyState(VK_CONTROL) < 0) {
      // C-/
      return "/";
    }

なるほど。

NvimTexture へ続く

20210829 太字がずれる?