Ich verwende grep
, um Funktionsvorkommen in einem Projekt zu finden.
:grep "set_val" *
Geht aus vim und gibt aus:
code.py:68: self._device.set_val('Level', new_level)
code.py:84: self._device.set_val("Mode", "Remote")
Press ENTER or type command to continue
Ich drücke die Eingabetaste und bin bei code.py:68
welchem das erste Mal vorkommt.
Wie bewege ich mich zu anderen Ereignissen?
external-command
TheMeaningfulEngineer
quelle
quelle
Antworten:
:grep
/:vimgrep
Beide verwenden die Quickfix-Liste, um Standorte zu speichern. Wie Sie bemerkt haben, springt vim automatisch zum ersten Vorkommen (verwenden Sie!
, um dieses Verhalten zu vermeiden). Verwenden Sie einfach:cnext
, um zum nächsten Speicherort in der Quickfix-Liste zu gelangen.Quickfix-Befehle
:cnext
/:cprevious
um den Quickfix in der Quickfix-Liste vorwärts und rückwärts zu navigieren:cfirst
/:clast
um zum Anfang und Ende der Quickfix-Liste zu springen:copen
diese Option, um das Quickfix-Fenster zu öffnen. Verwenden Sie<cr>
diese Option, um zu einem Eintrag zu springen:cclose
diese Option, um das Quickfix-Fenster zu schließen:cc
diese Option , um den aktuellen Fehler anzuzeigen.:colder
/:cnewer
um ältere / neuere Quickfix-Listen zu überspringenIch würde empfehlen, dass Sie Zuordnungen für
:cnext
und erstellen:cprevious
. Ich persönlich benutze unimpaired.vim , das]q
&[q
Mappings für:cnext
und bereitstellt:cprevious
.Wenn Sie möchten, dass das Quickfix-Fenster automatisch geöffnet wird, geben Sie Folgendes in Ihr Feld ein
vimrc
:Zu diesem Thema gibt es eine Vimcasts- Episode : Durchsuchen Sie mehrere Dateien mit: vimgrep .
Projektweite Suche und Ersetzung
Wenn Sie
:grep
/:vimgrep
als Möglichkeit verwenden, eine projektweite Suche und Ersetzung durchzuführen, empfehle ich Ihnen,:cdo
/:cfdo
(in Vim 7.4.980+) zu verwenden.Wenn Ihre Version von Vim nicht haben
:cdo
/:cfdo
geben Sie die folgenden Befehle in dervimrc
Datei zur Verfügung zu stellen:Cdo
/:Cfdo
alternative Befehle.Verwenden eines alternativen Programms für
:grep
Manchmal
grep
ist es nicht gut genug für Ihre Suchanforderungen. Sie können Ihr:grep
Programm über die'grepprg'
Einstellung ändern (müssen möglicherweise auch geändert'grepformat'
werden). Persönlich verwende ich ripgrep, indem ich Folgendes zu meinervimrc
Datei hinzufüge, wie inrg
der Manpage angegeben:Hinweis: Möglicherweise möchten Sie ein
-S
Flag verwenden, z. B. dieset grepprg=rg\ -S\ --vimgrep
Suche nach "intelligenten Groß- und Kleinschreibung" (Suche ohne Berücksichtigung der Groß- und Kleinschreibung, wenn alle Kleinbuchstaben verwendet werden).Jetzt
:grep
wird verwendet, umrg
zu suchen. zB:grep foo -t js
.Es gibt einige alternative Grep-Programme, die Sie sich ansehen sollten: ack , ag , ripgrep und
git grep
( Fugitive.vim bietet:Ggrep
Wrapper)Weitere Hilfe finden Sie unter:
quelle
:cwindow
/:copen
innerhalb desQuickFixCmdPost
autocmd-Ereignisses verwenden, wird der aktuelle Puffer nach dem Auslösen wiederhergestellt. Sie können dem Fenster einen beliebigen:wincmd b
oder einen beliebigen Fensterbefehl hinzufügenautocmd
, das Fenster wird jedoch wiederhergestellt. Dies wird in angedeutet:h autocmd-use
. Wenn Sie darüber nachdenken, ist dieses Verhalten sinnvoll, da möglicherweise mehrere Autocmds an ein Ereignis angehängt sind, die alle bestimmte Annahmen wie den aktuellen Puffer haben. Ich kann mir vorstellen, dass der Weg, um das Problem zu erzwingen, darin besteht, dies in Ihren Quickfix-Befehl zu packen. zB:command! Grep -nargs=+ grep <args> | cwindow