検索でジャンプする
ファイルが長くなると、行番号を数えて飛ぶより「あの単語のところ」と言えたほうが速くなります。検索はVimでは移動キーの一種で、覚えるのは / と n と N の3つだけです。
検索は移動キーの一種
Vimの検索は「探して一覧を出す」機能ではなく、カーソルを動かすキーです。だから d や c と組み合わせられて、d/return と打つと「次の return の手前まで消す」になります。
最後まで行くとファイルの先頭に戻って続きます(折り返しの際はメッセージが出ます)。上方向へ検索したいときは ? を使いますが、/ と N の組み合わせでも同じことができます。
カーソル下の単語を検索する
単語の上で * を押すと、その単語を打ち込まずに検索できます。変数名の使われている場所をたどるときはこれが速く、逆方向は # です。
検索した語がハイライトされたままで邪魔なときは :noh で消せます。入力の途中から候補位置に飛んでくれる incsearch と、見つかった語を光らせる hlsearch は、設定ファイルで有効にしておくと便利です。
大文字と小文字をどう扱うか
既定では検索は大文字小文字を区別します。set ignorecase を書くと区別しなくなりますが、そのままだと大文字で探したいときに困ります。そこで set smartcase を一緒に書くのが定番で、検索語に大文字が1つでも含まれていれば区別する、という動きになります。
この2つを組み合わせると、error で探せば Error も ERROR も拾い、Error で探せば Error だけを拾います。設定を1回だけ書いておけば、あとは打ち方で切り替わります。
検索は範囲の指定にも使える
検索がモーションだということは、d/return のように削除の範囲として渡せるということです。さらに / の後ろにはオフセットを付けられて、/return/e と書くと見つかった語の末尾にカーソルが止まります。d/return/e なら return を含めて消せます。
「ここからあの単語まで」という範囲は、行やカッコの単位では言い当てにくいことがあります。そのときに検索を範囲として使えるのは、Vimの中でも強力な部類の書き方です。
正規表現の書き方を切り替える
Vimの検索パターンは、多くの記号を \ で打ち消して書く決まりになっています。( や + をグループや繰り返しの意味で使うには \( \+ と書きます。他の言語の正規表現に慣れていると書きにくいところです。
パターンの先頭に \v を付けると、この打ち消しがほぼ不要になります。/\v(foo|bar)+ のように、他の言語と近い書き方ができます。長いパターンを書くときは \v から始めると読みやすくなります。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| / | 下方向へ検索 |
| n | 次の検索結果へ |
| N | 前の検索結果へ |
| * | カーソル位置の単語を検索 |
| # | 同じく逆向きに検索 |
| ? | 上方向へ検索 |