https://github.com/vim-denops/denops.vim でDenoを使ったvimプラグインを作ってみる。

インストール

Install - Denops Documentation favicon vim-denops.github.io
Install - Denops Documentation
  • Deno を公式の手順で入れるか、asdf(rtx)でインストールする。
  • vim-denops/denops.vim プラグインを追加する

チュートリアル

https://vim-denops.github.io/denops-documentation/tutorial.html

プラグイン用のディレクトリを作成する

mkdir ~/my-first-denops
mkdir -p ~/my-first-denops/denops/helloworld
touch ~/my-first-denops/denops/helloworld/main.ts
vim.opt.runtimepath:append("~/my-first-denops")
vim.g["denops.debug"] = 1

プラグインの中身を書く

import { Denops } from "https://deno.land/x/denops_std@v1.0.0/mod.ts";
import { execute } from "https://deno.land/x/denops_std@v1.0.0/helper/mod.ts";
import { ensureString } from "https://deno.land/x/unknownutil@v0.1.1/mod.ts";
 
export async function main(denops: Denops): Promise<void> {
  denops.dispatcher = {
    async echo(text: unknown): Promise<unknown> {
      ensureString(text);
      return await Promise.resolve(text);
    },
  };
 
  await execute(
    denops,
    `command! -nargs=1 HelloWorldEcho echomsg denops#request('${denops.name}', 'echo', [<q-args>])`,
  );
};

vimを開き直して、 :HelloWorldEcho Hello Denops! を実行するとコンソールに Hello Denops! が出力される

感想

書き慣れたTypeScriptで補完を効かせながら書けるので便利そう。

LSPでdenolsとtsserverを入れていると*.tsに対してtsserverが実行されてしまい、うまく補完されなかったので切り替えられるようにした Neovim mason-lspconfigでdenolsとtsserverを切り替える]