🐼

Neovimの‘設定’でGitHub Issueビューアを書いてみる

2024/12/25に公開

tl;dr

  • Neovimの設定でGitHub Issueビューアを書いてみた
  • Denopsを使って設定してみた

成果物

単なる設定なので、私の個人的なリポジトリに置いています。
ほとんどそのままコピペで動くとは思うので、興味があればどうぞ。

GitHub Issue Viewer

呼び出し部分だけ、ほかのプラグインであるddu.vimに依存しているので、
その部分は省略して以下のように呼び出すことができます。

:call denops#notify("github", "router:open", ["issue/view", {"owner":"kyoh86", "repo":"dotfiles", "num":"119"}])

または

:new github://issue/view;owner=kyoh86&repo=dotfiles&num=119

感想

感想ってなんじゃいって話ですが、これを作るに当たって、結構
Vim/Neovimの設定の面白さを再確認できた気がします。

  • Vim/NeovimのSyntaxは面白い
  • GitHub APIを使うような処理でDenoはやはり便利
  • Denopsで「設定をプログラムする」のは楽しい

Vim/NeovimのSyntaxは面白い

今回、GitHub Issueを表示するために、オリジナルのSyntaxを書くことになりました。
これは、GitHubのIssueのMarkdownのSyntaxをベースにして、Issueを構成する要素を独自の構文で表現するものです。

NeovimといえばSyntaxはもはや古いものとして、LSPやTree-sitterによるハイライトが推されています。
実際、Syntaxにも向き不向きはあり、Syntaxで表現しやすい形式というのは限られていると思います。

とはいえ、ある程度の表現力はあるので、今回作ったような独自の形式をSyntax前提で考えると、なかなか楽しいです。

GitHub APIを使うような処理でDenoはやはり便利

TypeScriptは最強です。
DenoはTypeScriptを使うためのランタイムです。
つまり最強です。Q.E.D.

Denopsで「設定をプログラムする」のは楽しい

Denopsは、Vim/NeovimのプラグインをDenoで作るためのライブラリです。

Denops

Denops (/ˈdiːnoʊps/, pronounced as dee-nops) is an ecosystem designed for developing plugins for Vim and Neovim using Deno (a TypeScript / JavaScript runtime).

ですが、Vim/Neovimにおいてプラグインと設定の境界が曖昧であるように、DenopsでVim/Neovimの設定としてプラグイン並に複雑な処理を書くことができます。

今回のGitHub Issue Viewerも、Denopsを使って設定しています。
Neovimの設定ディレクトリの下に直接 denops/github/main.ts のようにDenopsとしてのエントリポイントを置いて、以下のように呼び出すことができています。

call denops#notify("github", "router:open", ["issue/view", {"owner":"kyoh86", "repo":"dotfiles", "num":"119"}])

詳細はDenopsのドキュメントを見ていただきたいですが、要は'runtimepath'にDenopsのエントリポイントがあればいいのです。

まとめ

いろいろと面白いことができるVim/Neovimの設定ですが、Denopsを使うことでさらに面白いことができるようになりました。
ぜひ、興味があればVim/Neovimの設定にもDenopsを使ってみてください。

Discussion