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


他にはリファクタリング以外だとvim上でのデバッガとかも気になっています。