Vim完全バイブル 第3章 検索

「Vim完全バイブル」のメモの続きです。
今回は主に基本的な検索コマンドと関連するオプションについてです。
検索は編集したいテキストにカーソルを移動させる手段として非常に強力なので、是非とも身につけておきたいところです。


「第3章 検索」の内容は以下の通りです。

  • 検索コマンド
  • 検索履歴
  • マッチした文字列の強調表示
  • インクリメンタルサーチ
  • 正規表現による検索(簡易版)
  • 補足:コマンドやオプションの短縮形

検索コマンド

以下のコマンドの{pattern}に検索したい文字列を指定すればよい。
ここでいう前方、後方とは、それぞれファイルの先頭⇒終端に向かう方向と終端⇒先頭に向かう方向のことを指す。


検索コマンド

/{pattern} カーソル位置から前方へ{pattern}を検索し、最初にマッチした個所にカーソルを移動する
?{pattern} カーソル位置から後方へ{pattern}を検索し、最初にマッチした個所にカーソルを移動する
/ 最後に検索した{pattern}を前方検索する
? 最後に検索した{pattern}を後方検索する
n 最後に行った検索を同方向に繰り返す
N 最後に行った検索を逆方向に繰り返す

なお、.、*、[、]、^、%、/、\、?、~、$の文字は{pattern}中で使うと特別な意味を持つため、これらの文字を検索するには直前に\を付けなければならない。例えば、.を検索するには以下のようにすればよい。

/\.

検索履歴

一度実行した検索コマンドは自動的に履歴に残る。
何回か前に実行した検索を再び実行したい場合は、/もしくは?を入力した状態で↑キー(CTRL-P)を入力していく。すると、以前検索した{pattern}が順に表示される。
この状態で↑キー(CTRL-P)や↓キー(CTRL-N)を入力して履歴を辿り、検索したい{pattern}が表示されたところでを入力すれば、実際に検索を行うことができる。

マッチした文字列の強調表示

'hlsearch'オプションをonにしておくと、検索にマッチした文字列がハイライト(強調表示)される。

:set hlsearch

ハイライトを無効にするには、以下のコマンドを実行する。

:set nohlsearch

また、現在の検索結果だけに対してハイライトを一時的に無効にするには、以下のコマンドを実行する。

:nohlsearch

この場合、新たに別の検索を始めると強調表示は再び有効になる。

インクリメンタルサーチ

'incsearch'オプションをonにすると、インクリメンタルサーチが行えるようになる。

:set incsearch

インクリメンタルサーチを有効にすると、検索コマンド(/?)の後に1文字タイプするたびに検索を自動的に行い、最初にマッチする箇所がハイライトされるようになる。


例えば、以下のテキストを編集しているときに、赤枠のmannerという単語に移動したいとする。

'incsearch'オプションが有効になっている状態で、/m まで入力すると、最初にマッチしたmが自動的にハイライトされる。

しかし、目的の単語mannerにはマッチしていないので、次の文字 a を入力する。

やはりmannerにマッチしていないので、次の文字 n を入力する。

これでmannerにマッチしたので、を入力して検索を確定させる。すると、mannerの位置にカーソルが移動する。


なお、インクリメンタルサーチを無効にするには、以下のコマンドを実行する。

:set noincsearch

正規表現による検索(簡易版)

検索コマンド中の{pattern}には、正規表現を指定することができる。
以下にVimで使用可能な正規表現の一例を示す。
より高度な正規表現についての詳細は第19章で扱う。


正規表現

^ 行頭
$ 行末
. 任意の1文字


以下に正規表現を使った検索コマンドの例を示す。
行頭から始まるfooを検索する場合。

/^foo

行末にあるbarを検索する場合。

/bar$

hogeとだけ書かれている行を検索する場合。

/^hoge$

また、h.geと書くと、.の位置は任意の1文字にマッチするので、例えばhageやhigeやhogeなどのテキストを検索することができる。

/h.ge

いい例が思いつかなかったのは秘密。

補足:コマンドやオプションの短縮形

実は、ほとんどの:から始まるコマンドやオプションには省略形が存在する。
例えば、:setは:seと省略して入力しても同じ意味になる。
同様に、行番号を表示する'number'オプションは'nu'と省略できる。


従って、行番号を表示するには以下のようにコマンドを入力すればよい。

:se nu


なお、今までに出てきた他のコマンドやオプションは以下のように省略できる。
Vi互換を無効化する。

:se nocp

ヘルプを表示する。

:h

ダイグラフを表示する。

:dig

検索にマッチした文字列をハイライトする。

:se hls

検索結果のハイライトを一時的に無効化する。

:nohls

インクリメンタルサーチを有効にする。

:se is


省略すると入力が少しだけ楽になるかも。
オプションを無効化する場合は、オプション名の前にnoを付加すればよい。

今回はここまで

次回はテキストの切り取り、貼り付け操作や複数ファイルの編集についてまとめる予定です。


なお、検索についてもっと詳しく知りたい方は、Vimのヘルプを参照してみると幸せになれるかもしれません。

:help pattern.txt