Neovimの‘設定’でGitHub Issueビューアを書いてみる
tl;dr
- Neovimの設定でGitHub Issueビューアを書いてみた
- Denopsを使って設定してみた
成果物
単なる設定なので、私の個人的なリポジトリに置いています。
ほとんどそのままコピペで動くとは思うので、興味があればどうぞ。
呼び出し部分だけ、ほかのプラグインである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 (/ˈ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