Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5657

vim plugin作成に入門するためにやったこと(主にtest, docの話)

$
0
0

GW、ちょうど時間があったのでvim pluginのhello worldをしてみました。

vim pluginの作成に関するドキュメントは充実している感覚でしたが、test周りだったりci周りなどどうするのが良さそうかあまりわからなかったので、自分なりにやったことをまとめます。

この記事で書くこと

vim plugin作成周りは以下の記事が凄く参考になるので、そちらを参照してください。

https://qiita.com/Sa2Knight/items/6b26d35af571c239da31
https://qiita.com/bonjin6770@github/items/31e60707ecf2ad6c4496

今回はplugin作成後のtestだったりdocだったりの話を書きます。

サンプルプロジェクト

足し算をするだけの関数を用意したpluginをサンプルとして作りました。
READMEに利用方法が書いています。
keymapなどは特に変更していないので、autoloadファイルのみ見ればOKです。
autoloadファイルに、one_plus_one#plusという関数を作っています。
今回はこれを対象にテストしたり、ciを回します。

https://github.com/mitubaEX/one_plus_one

testを書いて実行する

今回はtestディレクトリ配下にtestファイルを配置しています。

https://github.com/mitubaEX/one_plus_one/blob/master/test/one_plus_one.vim

今回はtest frameworkとして、vim-themisを利用しています。

他にもvspecなどがあると思います。
僕はrspecを書く機会があるので、個人的にvspecが好みだったりします。

実行方法はhelpに書かれている通り、bin/themisをPATHを通して実行できるようにします。
ciでは雑にcloneしてきてtestを実行するので、今回はlocalでもそのようにtestを実行します。

※間違えてcommitしたくないので、.gitignoreの設定は忘れずに

Makefileを設定する

test frameworkをcloneしてきて、testを実行するフローをMakefileを用いて行います。
ciではこれを呼ぶようにします。

https://github.com/mitubaEX/one_plus_one/blob/master/Makefile

ciの設定

今回はgithub actionsを利用します。
make allで、cloneとtest実行を行います。
これでspecが通ることが確認できればOKです。

https://github.com/mitubaEX/one_plus_one/blob/master/.github/workflows/main.yml

余談ですが、test framework側でテストが落ちたら、終了ステータスを変更してくれるのでciは自動的に落ちてくれます(便利)

docを書く

基本的に有名なリポジトリのdocを拝借すれば良さそうです。

https://github.com/mitubaEX/one_plus_one/blob/master/doc/one_plus_one.txt

今回は、easymotion/vim-easymotionのdocなどを参考しました。

これでplugin managerでinstallするとhelpも見れるのでよりpluginを利用しやくすなります。

終わりに

test, docを書くことでよりpluginの開発、利用が便利になるので、是非書くべきだと思います。
僕もこれから何かしらpluginを作る時はtestなど書いていこうと思います。

そして今回の諸々の情報を元に自分用のテンプレを作りました。
これからvim pluginを作りたいってなった時に利用したいなと思います。

https://github.com/mitubaEX/create_vim_plugin


Viewing all articles
Browse latest Browse all 5657

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>