webentwicklung-frage-antwort-db.com.de

Wie können Sie die Übereinstimmungen von Vims Suche auflisten?

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
3
Yordan Georgiev
: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.

200
too much php

Sie können auch Folgendes tun:

g/pattern/#

dadurch wird das gewünschte Muster und die Nummer der Zeile gedruckt.

48
Taurus Olson

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

41
Paul Ivanov

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).

30
freeo

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.

13
dekeguard

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

10
Kevin

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

8
user55400

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
7
user1859022
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.

5
Sagar Jain

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>
0
user2679290

Strg-f, um alle Suchergebnisse aufzulisten:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>
0
Fisher