give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

Vimと正規表現でRubyのハッシュを新しい構文に一括置換する

Rubyのサンプルコードをネットから拾ってきたりすると、ハッシュの構文が新旧入り乱れて一貫性がなくなったりします。

#古い構文
some_method :hoge => "abc"

#新しい構文
some_method hoge: "abc"


一貫性のないコードは美しくないので、正規表現を使って一括置換しちゃいましょう。
下はVim用の置換コマンドです。

:%s/:\(\w\+\) =>/\1:/g


正規表現なので基本的な考え方は他のエディタでも使えます。
また、対象のコードによっては上の正規表現がうまくマッチしない場合もあると思いますので、その際は自分でうまくアレンジしてみてください。


追伸、
テストでちゃんとコードを保護してから、一括置換を実行しましょう。


追伸2、
ついでにメソッド呼び出し時のカッコを外すVimコマンドも載せておきます。
ただし、外すとうまく動かない場合もあります、。
また、カッコがネストしているとうまく置換できないので、毎回置換するかどうか確認しながら進めた方がベターです。

#before
some_method("abc", "def")
#after
some_method "abc", "def"
:%s/(\([^)]\+\))/ \1/gc


追伸3、
こちらはシングルクオートの文字列をダブルクオートに置き換える場合です。
ただし、厳密なチェックはしていないので「"this is 'hoge'"」のような文字列も置換しようとします。
置換する際は確認しながら進めてください。

#before
some_method 'abc', 'def'
#after
some_method "abc", "def"
:%s/'\([^']\+\)'/"\1"/gc