Проблема с некоторыми рефакторингами в Ruby и других динамически типизированных языках заключается в отсутствии информации о типе рефакторинга.
Из записи в блоге Cedric Beust:
Несколько месяцев назад я предложил следующий фрагмент кода автору браузера для рефакторинга Ruby:
def f1(o)
o.init
end
def f2(o)
o.init
end
class C
def init
...
end
end
И я спросил его: «Если я переименую C.init в C.init2, как вы узнаете, какой o.init нужно переименовать в f1 и f2?» .
Его ответ был недвусмысленным:
"Эта проблема сложна для языка с динамической типизацией. Я думаю, что компьютер не может определить, должны ли они быть переименованы или нет."
"Поэтому браузер Ruby Refactoring предоставляет две функции: одна переименовывает все методы с одинаковыми именами, а другая переименовывает только методы и вызовы, которые относятся к классу. Первому переименовывается o.initв f1 и f2, и последний не переименовывает их. "
Прочитайте всю запись здесь: Динамический язык, рефакторинг IDE.Выберите один.
Сказав это, Jetbrains имеет Ruby Mine IDE , который имеет большое количество рефакторингов .Я не уверен, как они управляют этим сценарием все же.
Рефакторинг Ruby Mine http://img709.imageshack.us/img709/917/refactoringsonrubymine.png
Нет ничего похожего на VIM, который я знаю.