2

TextmateからMacVimに変換していますが、Textmateの「プロジェクト内検索」機能の複製に苦労しています。で問題なく検索し:vimgrep /foo/g **/*.py、でクイックフィックスウィンドウを開くことができます:cope。そこから、問題なく適切な一致に移動して開くことができます。

私の問題は、開いた一致が正しくない場合、検索全体を再度実行しないと、検索結果ウィンドウに戻る方法が見つからないことです。でquickfoxウィンドウを:cope再度開くことができますが、開いたばかりのファイルの1つの結果しか含まれていません。

複数のファイルを検索して結果を管理するための一般的なワークフローは何ですか?

4

7 に答える 7

4

私はquickfixで同じ問題に遭遇しfiletype plugin indent on、quickfixウィンドウをすぐにクリアすることについてのコメントに気付いた後、これをプラグインjslintに追跡しました。これは、javascriptファイルが開かれるか書き込まれるたびにquickfixウィンドウを設定していました。開いているファイルタイプに対して同様のプラグインを有効にしている可能性があります。

于 2011-10-05T22:04:23.530 に答える
3

私は通常vimgrepを使用しません。私は、 Ackまたはgrepの2つのプラグインのいずれかを使用します 。たぶん、これら2つのうちの1つを使用する方が幸運です。

于 2011-01-02T18:38:35.610 に答える
3

:cnextとを使用してクイックフィックスリストを移動できます:cprevious障害のないものからのマッピングは非常に便利であること]q:cnextわかりまし[q:cprevious。障害のないプラグイン全体ではなく、マッピングのみが必要な場合は、.vimrcファイルに次のように記述します。

nnoremap ]q :cnext<cr>
nnoremap [q :cprevious<cr>
于 2011-01-02T21:05:49.123 に答える
0

私が正しく理解している場合は、プロジェクト内の多くのファイルに含まれる可能性のある特定の文字列を検索し、その文字列を変更してから、元のウィンドウに戻り、(必要に応じて)同じプロセスを再度実行しますか?

そうでない場合は、私の投稿を無視してください。そうでない場合は、cscopeを使用してください。

  1. cscope -Rbプロジェクトのルートディレクトリで:を使用してcscopeデータベースを構築 します。cscope.outこれによりファイルが作成されます

  2. vimを開き、以下を使用してcscopeデータベースを追加します。

    :cs add

  3. 文字列を次のように検索します。

    :cs fs

  4. コマンド3の結果から希望のファイルに移動し、必要な変更を行います。

  5. もう一度手順3を使用するか、を押しctrl + ^て元のファイルに戻ります。

于 2011-01-02T17:16:58.823 に答える
0

dreelが示唆しているのは、おそらく修正です。クイックフィックスのコンテンツが消えるという同じ問題がありましたが、pyflakes.vimlinterが原因であることがわかりました。linterはlintエラーのquickfixエントリを作成しようとしましたが、検索からquickfixコンテンツをクリアする効果がありました。クイックフィックスのサポートを無効にするlinterプラグインのオプションを設定すると、問題が修正されました。

于 2012-02-01T16:57:40.067 に答える
0

正しく思い出せば、問題はVimスクリプト/プラグインがクイックフィックスウィンドウの通常の操作を何らかの形で妨害していたことでした。このようなVimの問題に対処するときは、Vimを必要最低限​​のものに戻し、問題がまだ存在するかどうかを確認することをお勧めします。

于 2012-07-21T19:07:05.583 に答える
0

:colderandコマンドを使用して、:cnewer以前/新しいクイックフィックス(エラー)リストに移動できます。

vimヘルプから:

:colder

:col[der] [count]   Go to older error list.  When [count] is given, do
            this [count] times.  When already at the oldest error
            list, an error message is given.

:cnewer

:cnew[er] [count]   Go to newer error list.  When [count] is given, do
            this [count] times.  When already at the newest error
            list, an error message is given.
于 2013-04-26T20:45:48.243 に答える