Ich möchte die Spiele auflisten, wenn ich auf Folgendes stoße:
/example
so dass ich sehe, wo alle Spiele auf einmal sind.
" put in your ~/.vimrc file
" START search related configs and helps
"
" ignore case when searching
set ignorecase
" search as characters are entered, as you type in more characters, the search is refined
set incsearch
" highlight matches, in normal mode try typing * or even g* when cursor on string
set hlsearch
" yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline
" how-to search for a string recursively
" :grep! "\<doLogErrorMsg\>" . -r
"
" how-to search recursively , omit log and git files
" :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`
" :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'`
"
" how-to search for the "srch" from the current dir recursively in the Shell
" vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`'
"
" how-to highlight the after the search the searchable string
" in normmal mode press g* when the cursor is on a matched string
" how-to jump between the search matches - open the quick fix window by
" :copen 22
" how-to to close the quick fix window
" :ccl
" F5 will find the next occurrence after vimgrep
map <F5> :cp!<CR>
" F6 will find the previous occurrence after vimgrep
map <F6> :cn!<CR>
" F8 search for Word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
" omit a dir from all searches to perform globally
set wildignore+=**/node_modules/**
" use Perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/
noremap / /\v
"
" STOP search related configs and helps
:g//p
In seiner längeren Form:
:global/regular-expression/print
Sie können das Muster/Regex weglassen und Vim verwendet den vorherigen Suchbegriff erneut.
Trivia: Nach dieser Befehlsfolge wurde das Werkzeug grep benannt.
Sie können auch Folgendes tun:
g/pattern/#
dadurch wird das gewünschte Muster und die Nummer der Zeile gedruckt.
wenn Sie sich diese Liste ansehen und schnell zwischen den Spielen wechseln möchten, sollten Sie die Verwendung von in Betracht ziehen
:vimgrep example %
oder
:grep example %
Dadurch wird die "Fehlerliste" mit allen Übereinstimmungen gefüllt, sodass Sie :copen
verwenden können, um alle im Quickfix-Puffer aufzulisten, in einer bestimmten Zeile die Eingabetaste drücken, um zu dieser Übereinstimmung zu springen, oder mit Befehlen wie :cn
und :cp
zurückkehren und weiter.
eine ausführliche Erklärung finden Sie unter meine Antwort auf eine ähnliche Frage
Ich habe gerade einen neuen gelernt: den Location List
!
Geben Sie :lvim foo %
ein, um nach foo
in der aktuellen Datei zu suchen, und geben Sie alle Übereinstimmungen, die foo
enthalten, in die location list ein.
Geben Sie :lopen
ein, um die Standortliste im Quickfix-Fenster zu öffnen, das wie gewohnt vollständig navigierbar ist.
Verwenden Sie :lnext
/:lprevious
, um durch die Liste zu gelangen (verwenden Sie tpope/unbehinderte Zuordnungen, um die beste Erfahrung zu erhalten).
Eine andere Möglichkeit besteht darin, die Include-Dateisuchbefehle zu verwenden.
[I
Dadurch werden alle Vorkommen des Wortes unter dem Cursor aufgeführt. Es kann jedoch mehr sein, als Sie benötigen, da auch alle Dateien durchsucht werden, die in der aktuellen Datei enthalten sind.
Das Schöne an diesem Befehl ist jedoch, dass in der Ergebnisanzeige zusätzlich zur Zeilennummer jeder Übereinstimmung auch die Anzahl der Übereinstimmungen angezeigt wird.
:help include-search
viele Varianten zu sehen.
Eine Notiz über
:g//p
Dies kann weiter reduziert werden
:g//
denn, wie andere gesagt haben, ist p(rint) die Standardaktion.
Wenn Sie :set hlsearch
verwenden, werden alle Übereinstimmungen gelb markiert, sodass Sie die Datei problemlos nach Übereinstimmungen durchsuchen können. Das ist vielleicht nicht das, was Sie nach der Suche wollen: g // p liefert die aufgelisteten Übereinstimmungen
Um dies näher zu erläutern ... statt
/example
:g//p
sie können auch direkt schreiben
:g/example/p
oder, da p(rint) die Standardaktion für den Befehl: g (lobal) ist, kann dies zu verkürzt werden
:g/example
Anstelle von p (rint) sind andere Aktionen möglich, z. löschen). Siehe: Hilfe: global
sie können ein Nice quickfix
-Fenster mit den Übereinstimmungen aus Ihrem aktuellen Suchmuster erhalten
:vim // %
:copen
super praktisch, wenn Sie zuvor mit /pattern
ein komplexes Suchmuster erstellt haben
Edit : Gerade herausgefunden, das funktioniert auch für alle offenen Puffer
:bufdo vimgrepadd // %
:copen
g/pattern
Wenn Sie :set number
haben, zeigt der obige Befehl auch Zeilennummern an.
Wenn Sie :set number
nicht haben, dann
g/pattern/#
zeigt die Zeilennummern an.
Ich habe dafür ein Stück Code geschrieben. Es vermeidet tatsächlich die Probleme in vimgrep
. Es funktioniert auch mit unbenannten Dateien. Und es ist einfacher zu bedienen.
function! Matches(pat)
let buffer=bufnr("") "current buffer number
let b:lines=[]
execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
call setloclist(0, [], ' ', {'items': b:lines})
lopen
endfunction
Wenn Sie es mit einem Muster aufrufen, werden die Positionsfenster mit allen Übereinstimmungen geöffnet.
Dies könnte ein Befehl sein
command! -nargs=1 Mat call Matches(<f-args>)
Sie müssen also nur :Mat pattern
eingeben.
Ich verwende auch das folgende Mapping, um die Übereinstimmungen der aktuellen visuellen Auswahl zu erhalten.
vnoremap Y "xy:call Matches(@x)<CR>
Strg-f, um alle Suchergebnisse aufzulisten:
nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>