VimでRubyをリファクタリング出来るよ
2012-03-07 - longicornの日記でVim+RopeでPythonのリファクタリングが出来るようになったので、今回はRubyのリファクタリングも出来るようになったので、Ruby版も書いておきます。
インストール
の2つが必要です。
vim-ruby-refactoringをインストール直後にエラーになって、原因が何かと思えばmatchit.zipを使うらしいです。
ropeと違いこっちはこれだけでOKです。
ちなみみに、matchit.zipは"%"で対応するキーワードに移動する機能を拡張したものです。「matchit.vim : 「%」による対応括弧へのカーソル移動機能を拡張 — 名無しのvim使い」で解説されています。
設定
let g:ruby_refactoring_map_keys=1
としておけば、デフォルトのkey mappingが設定されます。
使い方
https://www.relishapp.com/despo/vim-ruby-refactoring/docs を見れば機能が書いています。
Ropeの場合でもそうでしたが、個人的に使うのは基本的にリネーム、メソッドへの切り出しの2つです。
また、Ropeのように作業ディレクトリを作成することはありません。
リネーム
vim-ruby-refactoringの場合変数名の変換だけあります。メソッド名変換はありません。
RRenameLocalVariableはローカル変数の置換を行います。
def method foo = 7 end
fooをビュジュアルモードで選択しておいてRRenameLocalVariableを実行して、days_in_weekと入力すると以下のようになります。
def method days_in_week = 7 end
RRenameInstanceVariableはインスタンス変数用です。
使い方はRRenameLocalVariableと同じですので説明は省略します。
メソッドへの切り出し
RExtractMethodでメソッドへの切り出しが可能です。
class Foo def method_one @bar = foo end def method_two one = 1 two = 2 three = 3 four = two + two five = two + three six = five + one end end
"two + three"をビュジュアルモードで選択しておいてRExtractMethodを実行してメソッド名を入力します。
するとこのようになるはずです。
class Foo def method_one @bar = foo end def add(three,two) two + three end def method_two one = 1 two = 2 three = 3 four = two + two five = add(three,two) six = five + one end end
まとめ
クラス名のリネームが無いのが不満ですが、メソッドへの切り出しが出来るだけでも嬉しいものです。
他の言語でないかなぁと探してみたらC言語系だと以下のようなのを発見。
これもそのうち挑戦してみないと。
http://code.google.com/p/lh-vim/wiki/lhRefactor
http://www.vim.org/scripts/script.php?script_id=2087