2011-02-01 5 views
8

私は長い時間ビマーです。しかし、私は検索を行うためにシェルに切り替え続けます。これにより私はquickfix機能を使用することができません。Vim grepprgオプションを設定して、外部ツールの検索が完了するまで待たされることはありませんか?

シェルに切り替える主な理由は、Vim(:grep)の内側からgrepを使用すると、進捗状況に従うことができないということです。

私が検索するコードベースは通常広いので、すぐに感謝します。

完全な結果が表示される前に、検索式が間違っていることがわかります。

これで検索をキャンセルし、式を絞り込んで検索を再開できます。

このパターンをVimの内部でどのように再現するかについてのヒントはありがたいです。

+0

をACKを呼び出すためにはgrepを使用することができます

:set grepprg=ack\ --nongroup\ --column\ $* :set grepformat=%f:%l:%c:%m 

3あなたの.vimrcにコンフィグ下に追加noaを使ってvimgrepをすばやく簡単に検索し、番号を指定して検索数を制限しますか? – mb14

+0

これはもう私にとって問題ではありません。私は今、MacOSX YosemiteとVim 7.4の下にいます。 /それが何を修正したのか分かりません。 –

答えて

1

あなたと同じvimの動作はありません。 :grepを実行すると、検索が完了する前にvim(quickfixではなく)で結果が表示されます(ただし、検索が完了するまで何もできません)。

私も何のvimの設定やプラグインを使用していない試してみました:

gvim -u NONE -U NONE 

それはあなたの行動ではない場合は、あなたのgrepprgを確認してください。鉱山がデフォルトである:私はgrep -e "score" -R /etcを実行する使用する場合

:verbose set grepprg 
grepprg=grep -n $* /dev/null 

私はvimの中で、この出力を参照してください。

:!grep -n -e "score" -R /etc /dev/null 2>&1| tee /tmp/voLcaNS/232 

それはあなたのシステムがteeが欠落していたり​​、Vimがそれを使用していない可能性があります(私はUbuntu 10.10でVim 7.2を使用しています)。 teeは、それに渡されたテキストを受け取り、ファイルとstdoutに書き込みます。


あなたが検索結果で更新し、あなたが探している間にブロックしていないVimを持ってますクイックフィックスを持つ方法を探している場合は、スクリプトを書くことができている:

  • バックグラウンド・プロセスとしてはgrepで検索し、ファイル
  • に毎秒をリダイレクトグレップが完了するまで、Vimはクイックフィックスで(cgetfileを)ファイルをロードしている(あなたが--remote-exprで他のプロセスから何かをするのvimを伝えることができます)

コードを開始するために私のAsyncCommand pluginを試すことができます。これは、検索が完了したときにのみファイルをロードすることを除いて、上記を行います。

1

あなたはack.vimに慣れていますか?クイックフィックスウィンドウは使用しませんが、分割して別のバッファを使用します。しかし、vimフレームに戻ってすぐに結果が出てくるのです。

+2

Ackはデフォルトでいくつかのファイル(バイナリなど)やディレクトリ(例:.git)をスキップするため、grepより高速です。 Grepは、同じものをスキップするように設定すると、速い(実際には速い)。個人的には私のパスに「grp」と書いてあります。 grep -rI --color --exclude-dir = \ .bzr --exclude-dir = \ .git --exclude-dir = \ .hg --exclude -dir = \ .svn --exclude-dir = build --exclude-dir = dist --exclude = tags $ * –

0

オンラインドキュメントの:vimgrepをご覧ください。それは、検索されているファイル名とそれが進むにつれて更新されます。

+0

あなたはそれが何かをしていることを知っているだけです。 ( 'vimgrep/gibberishdlgshjkls/g/etc/**/*'はまだファイル名を返します) – idbrii

0

これは、vim自体ではなく、grepteeの間のバッファリングによる可能性があります。この理論をテストするには、コマンドラインからgrepを実行し、出力をtee(つまりgrep <pattern> <files> | tee temp.out)にパイプします。あなたがvim内で観察しているのと同じように動作するならば、バッファリングが起こっています。

回避するには、(Ubuntu 10.10にsudo apt-get install expect-dev)、grepprgをunbuffer grep -n $* /dev/nullにインストールしてください。 (Turn off buffering in pipe参照)。

0

プロジェクト全体で3つの検索方法があります。

  • システムコマンドのgrep(速いが、Ouickfixリストとうまく動作しない)

    =>$ grep -n Example * 
    
  • :vim[grep] /{pattern}/[g][j] {file} ... 
    
  • Vimの内部のgrep(遅いが、強力なパターンをサポートしています)システムプラグインack(完璧)

    1インストールack

    brew install ack 
    

    2あなたが作ることができるのいずれか知っている、あなたは同様でvimの

    :grep "object\." app/**/*.rb 
    
関連する問題