【初心者向け】viでの文字列の検索方法を一通り

  • このエントリーをはてなブックマークに追加
  • Pocket

viで文字列を検索するには「/」を使用するのが一番多いだろう。コマンドモードでスラッシュを押して検索をするパターンだ。

他にもviでは、下から検索をすることもできるし、指定する場所へジャンプする機能などもある。

文字列検索がどこで使うのか?

Windowsのメモ帳やその他のテキストエディタに「文字列の検索」機能がそなわっているようにvimにも文字列の検索機能がそなわっている。

例えば「ソースコードのなかに特定の関数名が存在するかどうか?」などといった場合に役に立つ、扱うテキストの量が膨大になればなるほど「文字列の検索」は重宝するようになる。

いうなれば「砂漠のなかに落した米粒を探すような作業」となる。

人力では到底なしえないが、あなたの目の前にはコンピュータがある。コンピュータにおいて文字列操作、および検索は基本機能なので、単語、文字列をピンポイントでみつけだすことが出来る。

是非活用しよう。

vimで文字列検索

vimはノーマルモードの状態で「?」もしくは「/」が入力されると文字列を検索する状態になる。「/」はカーソルの現在地から下方向に「?」はカーソルの現在地から上方向に検索をかける。

試しに「/etc/fstab」ファイルを開いて「defaults」というキーワードを検索してみる。

上から順番に検索する「/」

/<文字列>

vi 検索

「/defaults」とすると上から順に検索が行われる。

下から検索を行う「?」

?<文字列>

vi 検索 ?

「?defaults」とすると下から検索が実行される。

対応する括弧に移動する「%」

検索かというと少々違うが、こちらも紹介しておこう。

% 対応する括弧に移動

括弧に合わせた状態で「%」を押すと対応した括弧まで移動してくれる。

かっこ 移動

かっこ

vimの場合、検索にマッチする文字列は、色がハイライトされるようになっている。また括弧の始まりで「%」を押すと括弧の終了部分まで移動してくれる。

次の検索キーワードへの移動

検索キーワードがハイライトされている状態で「n」もしくは「N」を押してみてほしい、それぞれ

n 順方向に次の検索結果へジャンプする

N 逆方向に前の検索結果へジャンプする

つまり/<文字列>で検索をかけている状態でnを押すと画面下へ検索がかかり、Nを押すと上へ検索がかかる。

?<文字列>を使用して検索をすると挙動が逆になる。Nを押すと画面下へ検索がかかり、nを押すと上へ検索がかかる。

実演しよう。「/」で上から検索をかけている場合は次のようになる。

search

ここで「n」を押すと次の検索結果に移動する。

n

「N」を押すと前の検索結果へ移動する。

search

「?」で検索をかけた場合、下から順に検索され「n」を押すと一つ上の検索結果へ移動「N」を押すと一つ下の検索結果へ移動する。つまり「/」と逆の動作をする。

特殊文字を検索したい場合

ノーマルモードにて「/<文字列>」とすれば検索が可能だがでは「/」自体を検索したい場合どうするのか?というと「/」のまえにエスケープ文字を設置してあげればよい。例えば

/\/usr\/bin

とすると

/usr/bin

が検索出来る。

実際にやってみると

/\/dev\/mapper\/centos-root

とすると以下のようになる。

エスケープ

複雑な検索をしてみる

正規表現に触れるとそれだけで一冊の本ができあがってしまうので、今回は正規表現を利用した「始まりと終り」の文字を指定した検索と複数の単語の検索を実行してみる。

「very magic」を使用する。vimの正規表現には少々方言的でなまりがあるのでvery magicを使用してなまりを吸収することにしよう。

使い方自体は難しくなく

/\v<正規表現>

最初の部分に「\v」を設置するだけで大丈夫だ。実際に使用してみよう。

ワイルドカードと同じ効能をさせる

「defaults」

という単語をさがしたい場合は単に

/defaults

defaults

でヒットする。

そこで正規表現を使用すると「def」ではじまり「lts」でおわる単語などを検索することができる。

/\vdef\w*lts

defaults2

となる。今回出現したみなれないものは

「\w」と「*」の混合だろう。

試しに

/\v\w

としてみると全ての文字列単語が検索対象になることがわかる。

char all

\wは文字であればなんでもヒットする。

*は直前の\w0回以上の繰り返しを意味する

つまりこの二つで一般的に言うワイルドカードとほぼ同じ効能がえられる。

ほか複数の単語を指定してみる。

/\v (defaults|xfs)

上のようにすると「defaults」「xfs」が選択される。

defaults xfs

「()」と「|」を使用している。比較的直感的になっているだろう。

:set ignorecase について

なお検索時には大文字と小文字を区別して検索がおこなわれる。もし検索結果を大文字小文字区別させたくないのならば

:set ignorecase

とコマンドモードからセットすると大文字小文字を区別しなくなる。

set ignorecase

まとめ

このページではviの検索機能についてまとめてお伝えした。

「/」と「n」だけで事足りる場合もあるが、覚えておいたほうが明らかに効率は上がっていく。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメント

コメントを残す

*

新入社員エンジニアへの配布用!
自走するエンジニアの心得 小冊子

エンジニア新入社員への教育用小冊子を期間限定配布中です

無料ダウンロードはこちらから ご自身の学習に役立てたい方はこちら