2005-06-17 (Fri) [長年日記]
_ VIMでRuby Refactoring Browserを使う
~/.vim/plugin/rrb.vimに以下のような内容を書いておく。
command -nargs=1 -range RubyExtractMethod :call s:RubyExtractMethod(expand("<args>"), <line1>, <line2>) function s:RubyExtractMethod(methodName, line1, line2) let path = expand("%") let out = system("rrb --extract-method " . path . " " . a:methodName . " " . a:line1 . " " . a:line2 . " --filein-overwrite " . path) if strlen(out) == 0 edit else echo out endif endfunction
で「:'a,. RubyExtractMethod foo」のように実行すると、 選択範囲がちゃんとfooというメソッドになる。 けっこうよさげ。
rrbコマンドのへルプを見ると、スーパークラスの抽出とかもできるようだ。
_ nodeline()
IRCでなかださんに教えてもらった、parse.yにあるデバッグ用の関数。 これがあれば、今まで
(gdb) p ((unsigned int)(((((struct RNode*)(ruby_current_node)))->flags>>(11 +8))&(((long)1<<(sizeof(NODE*)*8 -(11 +8)))-1)))
としてたのが、
(gdb) call nodeline(ruby_current_node)
こんなにすっきり!
括弧が多いのはcppのせいだよ。Lisperじゃないよ。
実際には「p nodeline(node)」ですね。callだと表示してくれないでしょう?<br>っていうか、今までそんなカッコほんとに使ってたんですかぁ。