Vimを使おう(中級編その2)

こんにちは、KUJIRAです。9月になりました。8月後半はブログを結局さぼってしまったので気合いを入れて書いていきたいと思います。

 

さて、今回はVimの中級編第2回ということでVimでの正規表現について記述していきたいと思います。前回もお話ししましたが、Vimはエディタなので検索と置換機能を備えております。この機能は通常のテキスト検索はもちろんのこと正規表現での検索もできます。この正規表現が検索や置換を行う上ではとても強力な武器になります。しかし、正規表現はプログラミング経験のある方ならご存知かもしれませんが記述のルールが言語ごとに若干違います。それはエディタであっても同じです。

 

記述ルールが違うのには色々理由がありますが、大体の場合は特別な意味を持つワードがあるためそれを回避しようとしてルールを変えているのがほとんどのように見えます。ですので、今回はVimに特化した記述方法をまとめます。

 

それでは見ていきましょう

 

正規表現の基本
検索を行うとき皆様どうされているでしょうか?多分、単純に特定の文字を指定して検索している人が多いと思っています。この方法はとてもシンプルで目的としているものを探すという点では優れたやり方ですが、検索というのはそれだけではありません。色々なパターンのワードを候補として検索したいということも中にはあると思います。
例えば以下のような名前のリストから『田』という字から始まる名前だけをピックアップするとします。

 

田中
多田
田村
大田原
中田
田代
野田
田門
田辺
小田原
岸田

 

この時、普通なら検索ワードに『田』を入れて検索する人が多いですが、リストを見れば分かるように全部『田』という字がどこかに入っているため先頭が『田』の字のものだけ検索するのは不可能です。

 

そこで出てくるのが正規表現です。コマンドモードで以下のように検索してみましょう。

 

/^田.*

 

すると『田』という字から始まる名前だけをピックアップすることが出来たと思います。この正規表現は色々な使い方が出来ますですが、まずは通常よく使うものを紹介しますので慣れてみてください。
以下にまとめます。

 

「^」:行頭を表します。
「$」:行末を表します。
「.」:文字を1文字表現する
「*」:一つ前の文字を0回以上繰り返す
「\+」:一つ前の文字を1回以上繰り返す
「{n}」:一つ前の文字をn回繰り返す
「{n,}」:一つ前の文字をn回以上繰り返す
「{n,m}」:一つ前の文字をn回〜m回繰り返す
「{,m}」:一つ前の文字を0回〜m回繰り返す
「[]}」:文字グループ

 

以上です。例として先ほどの正規表現を見てみましょう。

 

^田.*

 

これは行頭の次の文字が『田』でその後は任意の文字を0回以上繰り返す文字列をマッチさせる正規表現です。そのため『中田』や『大田原』などの文字列は検索結果としてヒットしません。

 

いかがでしょう?これだけで検索がかなり便利になったと思いませんか?今日は正規表現について基本的なところを学びました。次回も引き続き正規表現をやっていきたいと思います。

 

それではKUJIRAでした。