Gibt es eine Möglichkeit, die Option vim grepprg zu konfigurieren, um zu vermeiden, dass das externe Tool die Suche beendet hat?

8

Ich bin eine lange Zeit Vimmer. Ich wechsle jedoch immer wieder in die Shell, um Suchen durchzuführen. Das vermeidet mich, die Quickfix-Funktionalität zu verwenden.

Der Hauptgrund für den Wechsel zur Shell ist, dass ich, wenn ich grep von innerhalb von Vim (mit :grep ) verwende, den Fortschritt nicht verfolgen kann.

Da die Codebasis, nach der ich suche, normalerweise groß ist, schätze ich das unmittelbare Feedback sehr.

Es gibt mir eine Chance, herauszufinden, dass mein Suchausdruck falsch ist, bevor die vollständigen Ergebnisse angezeigt wurden.

Damit kann ich die Suche abbrechen, den Ausdruck verfeinern und dann die Suche neu starten.

Jeder Hinweis, wie man dieses Muster in Vim reproduzieren kann, wäre willkommen.

    
Godefroid Chapelle 01.02.2011, 16:42
quelle

5 Antworten

1

Ich sehe nicht das gleiche vim-Verhalten wie du. Wenn ich :grep ausführe, sehe ich immer noch die Ergebnisse in vim (nicht im Quickfix), bevor die Suche abgeschlossen ist (aber ich kann nichts tun, bis die Suche abgeschlossen ist).

Ich habe sogar versucht, keine vim-Einstellungen oder Plugins zu verwenden:

%Vor%

Wenn das nicht dein Verhalten ist, überprüfe dein grepprg . Mein ist der Standard:

%Vor%

Wenn ich run grep -e "score" -R /etc verwende, sehe ich diese Ausgabe in vim:

%Vor%

Es ist möglich, dass Ihr System tee fehlt oder Ihr vim es nicht benutzt (ich benutze Vim 7.2 unter Ubuntu 10.10). tee nimmt den übergebenen Text und schreibt ihn in eine Datei und in stdout.

Wenn Sie nach einer Möglichkeit suchen, den Quickfix mit Ihren Suchergebnissen zu aktualisieren und vim während der Suche nicht blockieren zu lassen, können Sie ein Skript schreiben, das:

  • sucht mit grep als Hintergrundprozess und leitet sie zu einer Datei
  • weiter
  • jede Sekunde, bis grep abgeschlossen ist, lade vim die Datei in Quickfix (% ​​co_de%) (du kannst vim sagen, dass er etwas aus einem anderen Prozess mit cgetfile machen soll)

Sie können mein AsyncCommand-Plugin ausprobieren, um Ihren Code zu starten. Es führt das obige aus, außer dass es nur die Datei lädt, wenn die Suche abgeschlossen ist.

    
idbrii 07.04.2011, 20:33
quelle
1

Kennen Sie ack.vim überhaupt? Es verwendet nicht das Quickfix-Fenster, sondern einen separaten Puffer in einem Split. Allerdings sind es eher schnellere Ergebnisse, die direkt zum vim-Frame zurückkommen.

    
sleepynate 03.02.2011 18:04
quelle
0

Sehen Sie sich in der Online-Dokumentation :vimgrep an. Es zeigt den Namen der Datei an, die durchsucht wird und aktualisiert wird.

    
Steve K 07.04.2011 08:06
quelle
0

Dies liegt möglicherweise an der Pufferung zwischen grep und tee , nicht vim selbst. Um diese Theorie zu testen, führen Sie grep von der Befehlszeile aus und leiten Sie die Ausgabe über tee (d. H.% Co_de%). Wenn es sich so verhält, wie Sie es in vim beobachten, tritt eine Pufferung auf.

Um zu umgehen, installieren Sie expect ( grep <pattern> <files> | tee temp.out auf Ubuntu 10.10) und grepprg auf sudo apt-get install expect-dev . (Siehe Pufferung in der Pipe deaktivieren ).

    
Garrett 19.04.2011 12:22
quelle
0

Es gibt drei Möglichkeiten, eine Suche in ganzen Projekten durchzuführen.

  • Systembefehl grep (schnell, aber nicht gut mit der Ouickfix-Liste)

    %Vor%
  • Vim interne Grep (langsam, aber eine starke Musterunterstützung)

    %Vor%
  • Systemplugin ack (perfekt)

    1 install ack

    %Vor%

    2 fügen Sie unter configs zu Ihrer .vimrc

    hinzu %Vor%

    3 Dann kannst du grep verwenden, um ack in vim wie

    aufzurufen %Vor%
hiveer 23.12.2015 07:47
quelle

Tags und Links