カテゴリー
Microsoft

Vim 内だけで単語を(他ファイルも含めて)グレップして検索結果一覧を表示して該当箇所にジャンプするやり方

ポイント

  • hoge で src 以下のディレクトリの拡張子が php のファイルをグレップし、結果を新しいウインドウにリスト表示
    # 以下はすべて同じ結果となる。
    :vimgrep hoge src/**/*.php | :cwindow
    :vimgrep <C-r><C-w> src/**/*.php | :cwindow
    :vim <C-r><C-w> src/**/*.php | :cw
    
  • グレップ対象の場所のパスを何度も入力する場合は、次のように変数に入れて再利用できる。
    :args batch/**/*.php
    
  • :args で変数に入れた内容は、## で取り出すことができる。
  • <C-w><C-w> でウインドウ切り替え、グレップ結果を移動して enter でファイル切り替え。

環境

  • Windows 7 Professional 32 bit
  • GVim
    Vim version 8.0.134

やり方

調査対象の場所に移動し、 確認する。

:cd C:¥Users¥username¥pj¥src
:pwd

調査対象となる、グレップしたい単語 (ResultExport) の含まれるファイルを開く。

:e src/export/dao/ExportDao.xml
<delete id='ResultExport'>

ResultExport 文字列のどこかにカーソルを合わせる。

検索したい文字列のどこかにカーソルが合った状態で * を押すと単語で検索され、次の出現箇所にジャンプする。背景色も変わる。N で 1 つ前に戻れる。背景色の変化は、グレップ結果一覧や結果へジャンプした後も有効となるため、グレップ対象文字列が長い言葉の一部の場合は見通しが良くなる

<C-r><C-w> と打つことで、エディタのカーソルのある単語がコマンドラインへペーストされる。

:vimgrep <C-r><C-w> batch/**/*.php | cwindow

と打つと、実際には次のように表示される。

:vimgrep ResultExport src/**/*.php | cwindow

単語がドットでつながれており全て選択できない場合は、必要部分を選択して Windows のコピーを行う。コマンドラインへのペーストは、 で行う。

:vimgrep <Shift-Insert> src/**/*.php | cwindow
:vimgrep hoge.fuga src/**/*.php | cwindow

コマンドを間違えた場合、ノーマルモードで q: と打つことで、履歷ウインドウが開く。手を加えたいコマンド行まで移動して、編集し、Enterで実行することができる。

2回目以降の :vimgrepでは、| cwindow の入力は不要。初回に cwindow を入力したことにより開いた検索結果一覧のウインドウに自動的に結果が反映される。

グレップ対象の場所のパスを何度も入力する場合は、:args を使って変数に入れることができる。

:args batch/**/*.php

:args で格納した変数は、## で呼び出すことができる。次のように使用する。

:vimgrep <C-r><C-w> ##

vimgrep を実行することで、ウィンドウ下部に新しいウィンドウが開き、検索結果一覧が表示される 上部ウィンドウには最初の検索結果が表示される。

検索結果一覧から選んでジャンプしたい場合は、まず <C-w><C-w> で検索結果一覧ウィンドウへ切り替える。

次に一覧の移動したい結果行に移動し、<CR>。

Windows の GVim で使用しているためか、マウスのカーソルを別のウィンドウに移動すると、カーソルも移動するので役に立ったり、不便だったりする。

また、Vim でビジュアルモードで選択するだけで、Windows システムのコピーがなされるので、Vim のコマンドラインに で貼り付けるときや、別のアプリに貼り付けるときに便利。

  • ウィンドウの表示高さを増やす: <C-w>+
  • ウィンドウの表示高さを減らす: <C-w>-

おわりに

次のページが参考になりました。ありがとう存じます!

以上です。

コメントを残す