皆さんもう最新の Denite は試されましたかね? 一つ前の記事では新しくなった Denite v3 についての紹介記事を書きました。
最近の Denite 熱の高まりに応じて source の自作にハマっています。今回は、node_modules
ディレクトリからパッケージを羅列する source を作ってみました。意外なことに、ググってもなかったんですよね、これ。
作ったもの
:Denite node_modules
でカレントディレクトリから一番近い package.json
を探し、同階層にある node_modules
を探索してくれます。dependencies
や devDependencies
などに列挙されているパッケージには [dev]
などのマークがついています。
Kind には directory
(:h denite-kind-directory
)を指定してありますので、対応した Action はなんでも実行できるようになっています。僕は fire/rec
source や grep
source を起動して、さらに検索を続けたりすることが多いです。
neoclide/npm.nvim
上では「ググってもない」なんて書いたんですが、実はあるんです。
あるんですが、少しこのプラグインは実装が複雑で、導入も難しいです。
- プラグイン独自の Kind を denite.nvim のディレクトリにコピーしないと動かない。
- 独自 Kind にしたのはもちろん機能を足すためなのでしょうが、個人的には、Kind に機能を足すよりも、必要な Action を利用者が自分で定義して使う方がスマートだと思います。
- 付属の Denite source では
package.json
内のdependencies
とdevDependencies
をリストアップすることしかできなかった。node_modules
にはもっといろんなパッケージがあるのに!
このような不満から、車輪の再発明に至った次第です。
まとめ
今回作成した Denite source は subprocess を起動するわけでもなく、非同期処理もありません。構造が単純なので source 作りの参考にしやすいと思います。以前 source 作成について書いた記事もリンクしておきますので、是非皆さんもオリジナルの source を作ってみてください。
- vim-go に unite/denite source を作って contribute した話 - Qiita
- vim-go と連携した source の作り方。
- 【Vim】mattn/memo の Denite source を作った - Qiita
- こっちでは subprocess + 非同期処理が必要な source を作っています。