: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
- Verwenden Sie
:copen
diese Option, um das Quickfix-Fenster zu öffnen. Verwenden Sie <cr>
diese Option, um zu einem Eintrag zu springen
- Verwenden Sie
:cclose
diese Option, um das Quickfix-Fenster zu schließen
- Verwenden Sie
:cc
diese Option , um den aktuellen Fehler anzuzeigen.
:colder
/ :cnewer
um ältere / neuere Quickfix-Listen zu überspringen
Ich 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
:
augroup autoquickfix
autocmd!
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
augroup END
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.
:grep 'foo'
:cfdo %s/foo/bar/g|w
Wenn Ihre Version von Vim nicht haben :cdo
/ :cfdo
geben Sie die folgenden Befehle in der vimrc
Datei zur Verfügung zu stellen :Cdo
/ :Cfdo
alternative Befehle.
if !exists(':cdo')
command! -nargs=1 -complete=command Cdo try | sil cfirst |
\ while 1 | exec <q-args> | sil cn | endwhile |
\ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
\ endtry
command! -nargs=1 -complete=command Cfdo try | sil cfirst |
\ while 1 | exec <q-args> | sil cnf | endwhile |
\ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
\ endtry
endif
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 meiner vimrc
Datei hinzufüge, wie in rg
der Manpage angegeben:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
Hinweis: Möglicherweise möchten Sie ein -S
Flag verwenden, z. B. die set 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, um rg
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:
:h :grep
:h 'grepprg'
:h quickfix
:h :cnext
:h :copen
:h :ccl
:h :cc
:h :colder
:h :cdo
:h :cfdo