Ich möchte die Übereinstimmungen auflisten, wenn ich drücke:
/example
so dass ich sehe, wo alle Spiele auf einmal sind.
Ich möchte die Übereinstimmungen auflisten, wenn ich drücke:
/example
so dass ich sehe, wo alle Spiele auf einmal sind.
Antworten:
" 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 / den regulären Ausdruck weglassen und Vim verwendet den vorherigen Suchbegriff erneut.
Wissenswertes: Das grep- Tool wurde nach dieser Befehlssequenz benannt.
:g//
- Da p (rint) die Standardaktion ist, können Sie dies auch weglassen.
:g/
ist noch kürzer!
--context 9
?
:%s/regular-expression//gn
Es wird etwas in dieser Richtung produzieren:X matches on Y lines
Sie können auch Folgendes tun:
g/pattern/#
Dadurch werden das gewünschte Muster und die Nummer der Zeile gedruckt.
#
ist nicht erforderlich. Es zeigt standardmäßig Zeilennummern
Wenn Sie sich diese Liste ansehen und schnell zwischen den Spielen wechseln möchten, sollten Sie die Verwendung in Betracht ziehen
:vimgrep example %
oder
:grep example %
Dadurch wird die "Fehlerliste" mit allen Übereinstimmungen :copen
gefüllt, sodass Sie sie alle im Quickfix-Puffer auflisten, in einer bestimmten Zeile die Eingabetaste drücken können, um zu dieser Übereinstimmung zu springen, oder Befehle wie :cn
und verwenden können :cp
, um hin und her zu gehen.
Eine ausführliche Erklärung finden Sie in meiner Antwort auf eine ähnliche Frage
E499: Empty file name for '%' or '#', only works with ":p:h"
auf MacVim 8.1
Habe gerade einen neuen gelernt: den Location List
!
Geben Sie in die aktuelle Datei ein, :lvim foo %
nach dem gesucht foo
werden soll, und geben Sie alle Übereinstimmungen foo
in die Standortliste ein .
Geben Sie :lopen
den Speicherort Liste im quickfix Fenster zu öffnen, die vollständig befahrbar wie es üblich ist.
Verwenden Sie :lnext
/ :lprevious
to, um die Liste zu durchsuchen (verwenden Sie tpope / unbeeinträchtigte Zuordnungen, um die beste Erfahrung zu erzielen ).
Eine andere Möglichkeit besteht darin, die Suchbefehle für Include-Dateien zu verwenden.
[I
Dadurch werden alle Vorkommen des Wortes unter dem Cursor aufgelistet. 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 Anzeige der Suchergebnisse neben der Zeilennummer jeder Übereinstimmung auch die Anzahl der Übereinstimmungen angezeigt wird.
:help include-search
viele Varianten zu sehen.
Ein Hinweis zu
:g//p
Dies kann weiter reduziert werden auf
:g//
weil, wie andere gesagt haben, p (rint) die Standardaktion ist.
[I
Kontext zu erhalten, wie auf grep --context 9
?
Sie können ein schönes quickfix
Fenster mit den Übereinstimmungen aus Ihrem aktuellen Suchmuster erhalten
:vim // %
:copen
Super praktisch, wenn Sie zuvor mit just ein komplexes Suchmuster erstellt haben /pattern
Bearbeiten : Ich habe gerade herausgefunden, dass dies auch für alle offenen Puffer funktioniert
:bufdo vimgrepadd // %
:copen
Mit :set hlsearch
wird alle Übereinstimmungen gelb hervorgehoben, sodass Sie die Datei problemlos nach Übereinstimmungen durchsuchen können. Dies ist jedoch möglicherweise nicht das, was Sie nach der Suche möchten: g // p gibt Ihnen die aufgelisteten Übereinstimmungen
:nohl
, um die Highlights zu löschen, wenn Sie sie nicht mehr benötigen.
Darauf näher einzugehen ... 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 auf verkürzt werden
:g/example
Und anstelle von p (rint) sind andere Aktionen möglich, z. B. d (elete). Siehe: Hilfe: global
g/pattern
Wenn ja :set number
, zeigt der obige Befehl auch Zeilennummern an.
Wenn nicht :set number
, dann
g/pattern/#
zeigt die Zeilennummern an.
Ich habe dafür einen 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 Standortfenster mit allen Übereinstimmungen geöffnet.
Dies könnte ein Befehl sein
command! -nargs=1 Mat call Matches(<f-args>)
Sie müssen also nur tippen :Mat pattern
Ich verwende auch die folgende Zuordnung, um die Übereinstimmungen der aktuellen visuellen Auswahl zu erhalten.
vnoremap Y "xy:call Matches(@x)<CR>
node_modules
? - - Wie Perl-Regexe die Standardfunktion von Vim ändern? - - Im Folgenden habe ich meine Suche nach .tex-Dateien gestaltet. Askubuntu.com/a/789769/25388 Es wäre schön, von Ihnen zu lernen, wie Sie sie verbessern können. Es ist nicht so intuitiv, deshalb habe ich die Logik auch oft selbst vergessen.