はじめに
最近、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 を使っている人は少ないかもしれませんが、同じ悩みを抱える人の助けになれば嬉しいです!