viで文字列を検索するには「/」を使用するのが一番多いだろう。コマンドモードでスラッシュを押して検索をするパターンだ。
他にもviでは、下から検索をすることもできるし、指定する場所へジャンプする機能などもある。
目次
文字列検索がどこで使うのか?
Windowsのメモ帳やその他のテキストエディタに「文字列の検索」機能がそなわっているようにvimにも文字列の検索機能がそなわっている。
例えば「ソースコードのなかに特定の関数名が存在するかどうか?」などといった場合に役に立つ、扱うテキストの量が膨大になればなるほど「文字列の検索」は重宝するようになる。
いうなれば「砂漠のなかに落した米粒を探すような作業」となる。
人力では到底なしえないが、あなたの目の前にはコンピュータがある。コンピュータにおいて文字列操作、および検索は基本機能なので、単語、文字列をピンポイントでみつけだすことが出来る。
是非活用しよう。
vimで文字列検索
vimはノーマルモードの状態で「?」もしくは「/」が入力されると文字列を検索する状態になる。「/」はカーソルの現在地から下方向に「?」はカーソルの現在地から上方向に検索をかける。
試しに「/etc/fstab」ファイルを開いて「defaults」というキーワードを検索してみる。
上から順番に検索する「/」
/<文字列>
「/defaults」とすると上から順に検索が行われる。
下から検索を行う「?」
?<文字列>
「?defaults」とすると下から検索が実行される。
対応する括弧に移動する「%」
検索かというと少々違うが、こちらも紹介しておこう。
% 対応する括弧に移動
括弧に合わせた状態で「%」を押すと対応した括弧まで移動してくれる。
↓
vimの場合、検索にマッチする文字列は、色がハイライトされるようになっている。また括弧の始まりで「%」を押すと括弧の終了部分まで移動してくれる。
次の検索キーワードへの移動
検索キーワードがハイライトされている状態で「n」もしくは「N」を押してみてほしい、それぞれ
n 順方向に次の検索結果へジャンプする
N 逆方向に前の検索結果へジャンプする
つまり/<文字列>で検索をかけている状態でnを押すと画面下へ検索がかかり、Nを押すと上へ検索がかかる。
?<文字列>を使用して検索をすると挙動が逆になる。Nを押すと画面下へ検索がかかり、nを押すと上へ検索がかかる。
実演しよう。「/」で上から検索をかけている場合は次のようになる。
ここで「n」を押すと次の検索結果に移動する。
「N」を押すと前の検索結果へ移動する。
「?」で検索をかけた場合、下から順に検索され「n」を押すと一つ上の検索結果へ移動「N」を押すと一つ下の検索結果へ移動する。つまり「/」と逆の動作をする。
特殊文字を検索したい場合
ノーマルモードにて「/<文字列>」とすれば検索が可能だがでは「/」自体を検索したい場合どうするのか?というと「/」のまえにエスケープ文字を設置してあげればよい。例えば
/\/usr\/bin
とすると
/usr/bin
が検索出来る。
実際にやってみると
/\/dev\/mapper\/centos-root
とすると以下のようになる。
複雑な検索をしてみる
正規表現に触れるとそれだけで一冊の本ができあがってしまうので、今回は正規表現を利用した「始まりと終り」の文字を指定した検索と複数の単語の検索を実行してみる。
「very magic」を使用する。vimの正規表現には少々方言的でなまりがあるのでvery magicを使用してなまりを吸収することにしよう。
使い方自体は難しくなく
/\v<正規表現>
最初の部分に「\v」を設置するだけで大丈夫だ。実際に使用してみよう。
ワイルドカードと同じ効能をさせる
「defaults」
という単語をさがしたい場合は単に
/defaults
でヒットする。
そこで正規表現を使用すると「def」ではじまり「lts」でおわる単語などを検索することができる。
/\vdef\w*lts
となる。今回出現したみなれないものは
「\w」と「*」の混合だろう。
試しに
/\v\w
としてみると全ての文字列単語が検索対象になることがわかる。
\wは文字であればなんでもヒットする。
*は直前の\w0回以上の繰り返しを意味する
つまりこの二つで一般的に言うワイルドカードとほぼ同じ効能がえられる。
ほか複数の単語を指定してみる。
/\v (defaults|xfs)
上のようにすると「defaults」「xfs」が選択される。
「()」と「|」を使用している。比較的直感的になっているだろう。
:set ignorecase について
なお検索時には大文字と小文字を区別して検索がおこなわれる。もし検索結果を大文字小文字区別させたくないのならば
:set ignorecase
とコマンドモードからセットすると大文字小文字を区別しなくなる。
まとめ
このページではviの検索機能についてまとめてお伝えした。
「/」と「n」だけで事足りる場合もあるが、覚えておいたほうが明らかに効率は上がっていく。
コメント