2011-07-29 7 views
1

私は通常find -type f | xargs grep 'something'を実行し、それらのファイルをVimで開こうとします。何が起こっているのですか、私はVimセッションを閉じて開かなければならないことがあります。結果を失った場合は、再度検索操作を実行する必要があります。 Vimで自動化する方法はありますか?これらのファイルをすべて別々のバッファに入れてシームレスに切り替えることができますか? Vim内でこれらのfindコマンドを実行して(!を使用して)これらのファイルをバッファとしてロードできるかどうかを調べています。コマンドで取得したファイルのセットをVimバッファーにロードする

上記の状況に該当する場合は、他の方法を使用しますか?

答えて

2

Vimには、Grep機能を統合して実装するいくつかのコマンドがあります( :help grep参照)。 2つの主要なものは:grep:vimgrepです。前者の は外部Grepプログラム(grepprgオプションで設定)を使用し、後者は コアGrep機能をVim自体で実装しています。

:vimgrepの主な利点は、** globワイルドカードを含むVim regexの構文と 移植性です。 :vimgrepコマンド は、拡張グロブパターンのサブセットを認識します(:help wildcardを参照)。この は、ほとんどの場合、findコマンドを避けることができます。 :vimgrepを使用すると、 の例の検索は次のようになります。お使いのシェルまたは grepprg**ワイルドカードを実装している場合

:vimgrep /something/ **/* 

同じ検索は、:grepコマンドを実行することができます。以下は、Zsh 拡張グロブ記法を示す例です。

:grep 'something' **/*(.) 

これらのコマンド(およびその変種)の両方

はQuickFixリストとそのウィンドウローカルバージョン、場所のリスト( :help quickfixを参照)と呼ばれるVimのインタフェース機能 を利用しています。 QuickFixウィンドウは、1つまたは複数のファイルに関する 種類の検索結果を含む特別な読み取り専用バッファです。検索結果Grepコマンドで収集された はすぐにQuickFixウィンドウに集約されます。

QuickFixリストは によって単一の行を検索パターンの各マッチング位置を表し、かつ迅速にこれらのラインにを入力 を押してそれらを切り替えることを可能にします。 QuickFixリストに関連するコマンドはほとんどありません。ここでは、それらの一部だけを出発点としてリストします(詳細はヘルプ を参照してください)。

  • :cw:copeは(それらの間の 違いを理解するのに役立つ参照)のQuickFixウィンドウを開きます。
  • :cc,:cn,:cpはそれぞれ現在の、次の、そして前の の一致をリストに表示します。
  • :cr,:claリスト内の最初の一致と最後の一致をそれぞれ に表示します。
  • :cclは、QuickFixウィンドウを閉じます。

ロケーションリストは、特定のウィンドウに添付されたQuickFixリストです。各ウィンドウ には、(ウィンドウのロケーションリストとQuickFixリストの他の から独立した)単一のロケーションリストを接続することができます。上記リストに記載されているQuickFixのリストコマンド には、ロケーションリストと同等の機能があります。

    :lw
  • または:lop現在 ウィンドウに関連付けられているロケーションリストを開きます。
  • :ll:lne:lp現在、次、および前の の一致がリストにそれぞれ表示されます。
  • :lr:llaリスト内の最初と最後の一致をそれぞれ に表示します。
  • :lclは、ロケーションリストを閉じます。 :grep:vimgrepコマンドの

場所のリストの対応は、それぞれ:lgrep:lvimgrep、です。

+0

どのようにファイルを順番にナビゲートしますか? –

+0

詳細な応答をありがとう。とても有難い!私はグーグルでマニュアルを見て回ったが、それはこれにつながることはなかった。ありがとうございました。 –

+0

@Senthil:ほとんどの場合、 ':cn'、':cp'コマンド、またはQuickFixリスト自体を使って、大抵はマッチの間を行き来するでしょう。 –

0

外部プログラムによって生成されたファイルのリストを開く場合は、もう1つのステップで簡単に行うことができます。各ファイルを別々のバッファとして読み込みます。

+0

':n'と':N'で一致するファイルを切り替えます。しかし、パターンがファイル内で一致する特定の位置の間をジャンプするには、それを何度も何度も検索する必要があります。 –

関連する問題