Vorrei elencare le corrispondenze, quando premo:
/example
in modo da vedere dove sono tutte le partite contemporaneamente.
Vorrei elencare le corrispondenze, quando premo:
/example
in modo da vedere dove sono tutte le partite contemporaneamente.
Risposte:
" 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
Nella sua forma più lunga:
:global/regular-expression/print
Puoi omettere il pattern / regex e Vim riutilizzerà il termine di ricerca precedente.
Curiosità: lo strumento grep prende il nome da questa sequenza di comandi.
:g//- poiché p (rint) è l'azione predefinita, puoi anche tralasciarla.
:g/è ancora più breve!
--context 9?
:%s/regular-expression//gn It produrrà qualcosa del genere:X matches on Y lines
Puoi anche fare:
g/pattern/#
che stamperà il motivo desiderato e il numero della riga.
#non è necessario. Mostra i numeri di riga per impostazione predefinita
se vuoi dare un'occhiata a questo elenco e saltare velocemente tra le partite, considera l'utilizzo
:vimgrep example %
o
:grep example %
Questo popolerà la "lista degli errori" con tutte le corrispondenze in modo che tu possa usare :copenper elencarle tutte nel buffer di correzione rapida, premere Invio su una riga particolare per saltare a quella corrispondenza, o usare comandi come :cne :cpper andare avanti e indietro.
per una spiegazione approfondita, vedere la mia risposta a una domanda simile
E499: Empty file name for '%' or '#', only works with ":p:h"su MacVim 8.1
Ne ho appena imparato uno nuovo: il Location List!
Digita :lvim foo %per cercare foonel file corrente e inserisci tutte le corrispondenze che contengono foonell'elenco delle posizioni .
Digita :lopenper aprire l'elenco delle posizioni nella finestra di correzione rapida, che è completamente navigabile come al solito.
Usa :lnext/ :lpreviousper scorrere l'elenco (usa le mappature tpope / non danneggiate per la migliore esperienza)
Un'altra possibilità è usare i comandi di ricerca di file include.
[I
Questo elencherà tutte le occorrenze della parola sotto il cursore. Potrebbe essere più del necessario, perché cercherà anche tutti i file inclusi nel file corrente.
Ma la cosa bella di questo comando è che la visualizzazione dei risultati della ricerca mostra anche un conteggio del numero di corrispondenze, oltre al numero di riga di ciascuna corrispondenza.
:help include-search
per vedere molte varianti.
Una nota su
:g//p
Questo può essere ridotto ulteriormente a
:g//
perché, come altri hanno detto, p (rint) è l'azione predefinita.
[Icontesto, come su grep --context 9?
puoi ottenere una bella quickfixfinestra con le corrispondenze dal tuo modello di ricerca corrente
:vim // %
:copen
super utile se in precedenza hai creato un modello di ricerca complesso usando solo /pattern
Modifica : ho appena scoperto che funziona anche per tutti i buffer aperti
:bufdo vimgrepadd // %
:copen
Utilizzando :set hlsearchevidenzierà tutte le corrispondenze in giallo, consentendo di scansionare facilmente il file per le corrispondenze. Potrebbe non essere quello che vuoi però, dopo la ricerca: g // p ti darà le corrispondenze elencate
:nohlper cancellare i punti salienti quando non ne hai più bisogno.
Per approfondire questo ... invece di
/example
:g//p
puoi anche scrivere direttamente
:g/example/p
oppure, poiché p (rint) è l'azione predefinita per il comando: g (lobal), questo può essere abbreviato in
:g/example
E invece di p (rint), sono possibili altre azioni, ad esempio d (elete). Vedi: help: global
g/pattern
Se lo hai :set number, il comando sopra mostra anche i numeri di riga.
Se non l'hai fatto :set number, allora
g/pattern/#
visualizzerà i numeri di riga.
Ho scritto un pezzo di codice per questo. In realtà evita i problemi in vimgrep. Funziona anche con file senza nome. Ed è più facile da usare.
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
Quando lo chiami con uno schema, apre le finestre di posizione con tutte le corrispondenze.
Potrebbe essere un comando
command! -nargs=1 Mat call Matches(<f-args>)
Quindi tutto ciò che devi fare è digitare :Mat pattern
Uso anche la seguente mappatura per ottenere le corrispondenze della selezione visiva corrente.
vnoremap Y "xy:call Matches(@x)<CR>
node_modules? - - In che modo le espressioni regolari Perl cambiano il funzionamento predefinito di Vim? - - Ecco come ho progettato la mia ricerca di file .tex askubuntu.com/a/789769/25388 Sarebbe bello imparare da te come migliorarla. Non è così intuitivo, quindi ho dimenticato spesso anche la logica.