Humanity

Edit the world by your favorite way

Vimの正規表現は戦闘用

タイトルは釣りです。
LingrVim正規表現の話が出たので、
ノリで今言い忘れたこととか書いてます。


Vim正規表現では+とか(が特別な文字じゃありません。
コマンドラインでさっと検索する用に最適化されてるという印象を受けます。
たとえば

:%s/eskk#\zsfunc\ze(/something_great/g

みたいにして「eskk#func(」を「eskk#something_great(」に置き換えることができます。
グループ化するにはどうすればいいかというと「\(fo\+\)」のようにバックスラッシュをつけます。
参照する必要がないなら「\%(fo\+\)」。Perlで言うと「(?:fo+)」ですね。

このようにグループ化しようとすると沢山エスケープしなきゃならないですが、
コマンドラインでさっと検索する分にはこの仕様はけっこう楽だったりします。


あと\zsと\zeが便利です。
って直前の正規表現で出しちゃったんですが。
これないと正規表現書けないわー慣れちゃったからなーつれー(ry

例はVimスクリプトでfooへ代入してる箇所のfooをbarに置き換える正規表現です。

:%s/let\s\+\zsfoo\ze\+\s*=/bar/g


正規表現が正しいか自信がないのなら/で検索して
fooの上でciwbarあるいはvllcbarあるいはRbarとしてbarに変え、
nで一つ一つ確認しながら.*1でリネームすることになるでしょう。




あと何か書こうとしたけど忘れた。
いつのまにか朝になってたのでいいかげん寝ます。
ヘッドフォンが外せない...

*1:.コマンド便利!