pockestrap

Programmer's memo

Cuculus.vimを作った

github.com

なにこれ

Rubyのdef-endなどの対応を%でジャンプするためのVimプラグイン。Parser gemを使っているので、Parser gemが正確にパースできるコードであれば正確な位置にジャンプできる。

動機

vim-jpのSlack1でmatchup.vimがうまく動かないという話を見て、Parser gemを使ってやったら面白そうだなと思って作ってみた。

f:id:Pocke:20190313151939p:plain
Cuculus.vimの貴重な誕生シーン

作ってから気がついたのだけど、自分が普段%を使っていないので、自分ではあまり使わない気がする。 trickのコードのような「何がどう対応しているのかさっぱりわからないコード」を読む時に多分とても便利。2

実装

Parser gemでコードをパースして、カーソル位置に対応するnodeを取り出して、対応した場所がbeginkeywordであればendの位置を、endであればbeginkeywordの位置を返してあげるだけ。 実装はとても短い3ので簡単に読める。

RipperではなくParser gemを使っているのは、Ripperだと「対応するend」を取るのが大変すぎるため。RubyVM::ASTは試してないからできるかどうかわからない。