VIMからgrepを使用する場合、結果にジャンプする方法は?


32

VIMにgrepプラグインを使用する場合、次のように、ファイルセット内のすべての文字列を現在のディレクトリで検索できます。

:grep Ryan *.txt

これは次のようなものを出力します:

file1.txt:3:Ryan was here
file2.txt:10:Ryan likes VIM
file3.txt:5:superuser.com is a fav of Ryan
(1 of 3): Ryan was here
Press ENTER or type command to continue

Enterキーを押すと、エディターに戻ります。私が本当にやりたいのは、これらのファイルの1つを開き、文字列が見つかった場所にジャンプできるようにすることです。これを行う方法はありますか?この1 of 3部分により、結果をタブで移動する方法があると思うようになりますが、どのコマンドを使用できるかわかりません。誰もこれにいくらか光を当てることができますか?

回答:


34

Enterキーを押すと、file1.txtの3行目が表示されます。次の一致にジャンプするには、:cn;を実行します。前の一致にジャンプするには、を実行し:cpます。実行:copenすると、一致のリストを含むウィンドウが開きます。目的の一致にカーソルを移動し、Enterキーを押してその一致にジャンプします。

の使用の:grep詳細については、

:help grep
:help quickfix.txt

タイピング:cn:cpQuickFixリストで前後に移動するには厄介なことができるので、私はこれらのマッピングを使用します。

nmap <silent> <C-N> :cn<CR>zv
nmap <silent> <C-P> :cp<CR>zv

また、:grepコマンドはプラグインではありません。Vimの一部です。


すばらしい回答、ありがとう!ところで、vim grepでフォルダーを再帰的に検索できますか?
マープルソフト

Unixシステムで実行している限り、Vimに任意の引数を追加できます。 :grepgrep、シェルから実行されるコマンドに追加する追加できます。そのため、現在のディレクトリ以下にあるすべての.txtファイルを再帰的に検索できます:grep -R --include=*.txt Ryan .。Vimの:vimgrepコマンドを使用して再帰的な検索を実行することもできますが、引数は異なり:grepます。
ゲイリージョン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.