前回は,コピー(またはカット)・アンド・ペーストを行単位や文字単位で行う方法を紹介しました。次のステップに進みましょう。本連載は,最初の目標としてWindowsのメモ帳のようにviを使うことがあります。

 メモ帳のメニューを見ていくと,コピーやカット(切り取り)などに並んで検索や置換があります。検索や置換ができると,テキスト処理の効率が大幅に上がります。今回は,文字列の検索や置換を解説します。

文字列検索

 文字列の検索を開始するには,通常モードで[/]キーを押します。すると,一番下の行に「/」が表示されます。以降入力する文字は「/」の後に表示されます。これが検索文字列です。

 例えば,「ITpro」を検索するなら,(図1)のようになります。入力後に[Enter]キーを押すと,検索開始時のカーソル位置から下方向,一番最初に発見された検索文字列の上にカーソルが移動します。

図1●文字列検索<br>「ITpro」という文字列を検索しました。
図1●文字列検索
「ITpro」という文字列を検索しました。
[画像のクリックで拡大表示]

 この時点で一度検索は終了し,通常モードに戻ります。検索を継続し,次の検索文字列に移動するには,通常モードで[n]キーを押します。[n]キーを押すたびに,次の検索文字列へと移動します。検索文字列は,別の文字列を検索したり,後述する置換したりなどするまでは保持されていますので,途中で文字列の編集などを行った後でも検索を再開できます。

 検索に必要な最低限の操作は以上です。[/]キーと[n]キー,この2つのキーをまず覚えておけば,多少の不便はあろうと文字列を検索できることでしょう。

正規表現

 検索でほかに知っておくべきことといえば「正規表現」です。viの検索は正規表現をサポートしています。正規表現の詳しい解説は本連載の趣旨から外れるのでほかに譲るとして,なぜ正規表現を知っておかなければいけないのでしょうか。

 正規表現は複雑な文字列検索を実施する場合に便利なものです。しかし,正規表現がサポートされていることで,予約語のように検索文字列に使えない文字(記号)がいくつかあり,それらの文字を使ってしまうと別の意味になってしまい,正しい検索が行えません。

 そこで,viでサポートされている正規表現の紹介も兼ねて,いくつか例を挙げて正規表現を説明しましょう。

 「*」は,直前の1文字の0回以上の繰り返しを表す正規表現です。例えば「itp*ro」という検索文字列指定した場合,直前の文字「p」を0回以上繰り返している文字列が対象になります。つまり「itro」「itpro」「itppro」「itpppro」などが一致します。

 それでは「itp*ro」という文字列を検索したい場合はどうすればよいのでしょうか。その場合,「*」の前に「\」(バック・スラッシュ)を付けます。ちなみに,これを“エスケープする”と言います。

 このように「itp\*ro」として検索文字列に指定すると,\直後の*をそのままの文字列として解釈します。*以外の特殊な意味を持つ記号も同じ要領で検索対象の文字列に指定できます。