0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めてNeovimプラグインを作ってみた感想

Posted at

はじめに

最近、yadm を使って dotfiles を管理し始めました。普段から Neovim を使って設定ファイルを編集しているのですが、ある問題に直面しました。
yadmはYet Another Dotfiles Managerの略でdotfilesを管理するためのgitのラッパープログラムです。

解決したかったこと

  • Neovimでファイルを開いてもyadm管理下であることを検出できず、git系プラグイン(例えばgitsigns.nviなど)が動作しない。
  • yadm enterしてから nvim を起動すれば動くが、正直めんどい。
  • yadm関連のプラグインがあまりない。telescope-yadmというプラグインがあるが、yadm listの結果をtelescope.nvimに渡している。それならgitとして認識させて telescope.builtin.git_filesを使うほうが良くないか?

→ と考えて「Neovim側で yadm の git repo を認識させれば良くない?」と思ったのが出発点です。

作ったもの

yadm管理下だとプラグインが判定したら、Neovim に「これはgit repoですよ」と認識させるだけのプラグインです。

中でやっていること

  • git rev-parse --is-inside-work-tree
  • yadm rev-parse --is-inside-work-tree

を実行してyadm環境下かどうかを判定したあと、git関連の環境変数をNeovimに設定するだけです。

テスト

telescope.nvimのテスト構成を参考にしました。Makefile + plenary.nvimでテスト実行するだけです。
外部コマンドの実行をモックする方法などはほぼChatGPTに聞いただけです。
CI、Linterなどの設定もほぼパクリです。

疑問: Neovimのプラグイン開発に関して

プラグインを開発するのが初めてだったので、正直スタンダードなやり方がわからない。
例えば、telescope.nvimでは自動テストの実行で最低限の環境を整えるminimal_init.vimというファイルがありますが、これを見ると、同じ階層にあるplenary.nvimやtreesitter.nvimをパスに登録している。

set rtp+=../plenary.nvim/
set rtp+=../tree-sitter-lua/

これは、Neovimのプラグイン開発はある程度決まったやり方があるのかなーという気がした。
lazy.nvim 使ってる自分としては、.local/share/nvim/lazy 配下で開発した方がいいのか?

誰かの開発ベストプラクティスを知りたい……

READMEの作成

書くのが面倒だったので ChatGPT に任せた。意外と整っていたのでそのまま使った。

yadmとWindows

yadm自体がWindows未サポートなので、Windowsでのテストは対象外としました。

これから考えたいこと

  • もっと効率的にyadmリポジトリだと判定する方法はないのか?
  • 外部コマンドをNeovim内で一番早く実行する方法は?

終わりに

小さなユースケースから始まったプラグイン開発でしたが、Neovimの拡張の自由さ、テストの難しさ、READMEの重要さ、いろいろ勉強になりました。
yadm を使っている人は少ないかもしれませんが、同じ悩みを抱える人の助けになれば嬉しいです!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?