Wie kann man mit grep von VIM zu den Ergebnissen springen?

32

Wenn ich das grep-Plugin für VIM verwende, kann ich das aktuelle Verzeichnis nach allen Vorkommen einer Zeichenfolge in einer Reihe von Dateien durchsuchen.

:grep Ryan *.txt

Dies gibt ungefähr Folgendes aus:

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

Wenn ich die Eingabetaste drücke, kehre ich zu meinem Editor zurück. Was ich wirklich tun möchte, ist in der Lage zu sein, eine dieser Dateien zu öffnen und zu der Stelle zu springen, an der der String gefunden wurde. Gibt es eine Möglichkeit, dies zu tun? Der 1 of 3Teil lässt mich denken, dass es eine Möglichkeit gibt, durch die Ergebnisse zu blättern, aber ich weiß nicht, welche Befehle mir zur Verfügung stehen. Kann jemand etwas Licht ins Dunkel bringen?

Marplesoft
quelle

Antworten:

34

Wenn Sie die EINGABETASTE drücken, sollten Sie in Zeile 3 von file1.txt suchen. Um zum nächsten Treffer zu springen, führen Sie aus :cn; Um zum vorherigen Treffer zu springen, führen Sie aus :cp. Beim Ausführen :copenwird ein Fenster mit der Liste der Übereinstimmungen geöffnet. Bewegen Sie den Cursor auf die gewünschte Übereinstimmung und drücken Sie ENTER, um zu dieser Übereinstimmung zu springen.

Weitere Informationen zur Verwendung :grepfinden Sie unter

:help grep
:help quickfix.txt

Das Eingeben :cnund :cpVorwärts- und Rückwärtsbewegen in der Quickfix-Liste kann umständlich sein. Daher verwende ich diese Zuordnungen:

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

Außerdem ist der :grepBefehl kein Plugin. es ist ein Teil von Vim.

garyjohn
quelle
Tolle Antwort, danke! Übrigens, können Sie mit vim grep eine rekursive Suche in Ordnern durchführen?
Marplesoft
Solange Sie auf einem Unix-System ausgeführt werden, können Sie beliebige Argumente zu Vims :grephinzufügen, die Sie einem grepvon der Shell ausgeführten Befehl hinzufügen würden . Sie können also eine rekursive Suche in allen TXT-Dateien im und unterhalb des aktuellen Verzeichnisses mit durchführen :grep -R --include=*.txt Ryan .. Sie können auch eine rekursive Suche mit dem :vimgrepBefehl von Vim durchführen , aber die Argumente sind unterschiedlich und ich verwende sie selten, weil sie langsamer als sind :grep.
Garyjohn